﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using DECOR.BL.BE;
using DECOR.BL.BC;
using System.Collections.Generic;
using AjaxControlToolkit;
using System.Net.Mail;
using System.IO;
using System.Text;
using CM.BL.BE;

namespace DECOR.WebApp
{
    public partial class DocVenta : System.Web.UI.Page
    {
        private List<GenericBE> _lvLstCentros = new List<GenericBE>();
        private List<GenericBE> _lvLstAlmacenes = new List<GenericBE>();
        private List<GenericBE> _lvLstLotes = new List<GenericBE>();
        private List<StockBE> _lvLstCAL = new List<StockBE>();
        private string _lvCALSessKey = string.Empty;
        private readonly string _lvPreCALSessKey = "LstCAL";
       
        private List<GenericBE> _lvLstPrioridadEnt = new List<GenericBE>();
        private List<GenericBE> _lvLstGrupoMat = new List<GenericBE>();
        private List<GenericBE> _lvLstMotivoRechazo = new List<GenericBE>();
        private ClienteBE _lvObjCliente;
        private PedidoBE _lvObjPedido = new PedidoBE();
        public string gvSectorVal = "00";
        public string gvGrpVendVal = "100";
        bool validaDsctoAdicional = true;
        decimal _totStockDisponible = 0m;//rgutierrez 22.11.2011
        
        private void limpiaPedido()
        {
            this.limpiarCliente();
            this.limpiarClienteEventual();
            this.limpiarInterlocutores();
            this.limpiarTextos();

            txtCodCliente.Text = "";

            lblMensajeTC.Text = string.Empty;
            lblSimbSubtotal.Text = string.Empty;
            lblSimbTotal.Text = string.Empty;
            
            txtIgv.Text = "";
            txtSubtotal.Text = "";
            txtTotal.Text = "";
            txtPesoTotal.Text = "";
            txtPesoTotal.ReadOnly = true;
            txtTotalDcto.Text = "";
            //---------------------
            //cmbSector.SelectedIndex = 0;
            cmbOficina.SelectedIndex = 0;


            cmbCondicionesPago.SelectedValue = "";
            cmbCondExp.SelectedValue = ParametroBC.Instance.getParamValue("CondExpDefault");
            cbxReembolsable.Checked = false;

            txtOrdenCompra.Text = string.Empty;
            txtCorreo.Text = string.Empty;
            //rhuapaya 15.02.2012
            txtNomProyecto.Text = string.Empty;

            //agregar cod de proyecto y cod de version
            txtCodProyecto.Text = string.Empty;
            txtCodVersion.Text = string.Empty;

            cmbBloqueoEntrega.SelectedValue = "";
            cmbBloqueoFactura.SelectedValue = "";
            cmbGrupoCond.SelectedValue = "";
            cmbMotivo.SelectedValue = "";
            cmbTipoVisita.SelectedValue = "";
            cmbMoneda.SelectedIndex = 0;

            //datos x defecto:
            txtTipoCambio.Text = ParametroBC.Instance.getTipoCambio().ToString();
            txtFecha.Text = DateTime.Now.ToString("dd/MM/yyyy");
            txtFechaValidez.Text = DateTime.Now.ToString("dd/MM/yyyy");

            cgvMateriales.DataSource = new DataTable();
            cgvMateriales.DataBind();

            //-- limpiar info del cliente:
            cmbOrgVtas.DataValueField = "Codigo";
            cmbOrgVtas.DataTextField = "Descripcion";
            cmbOrgVtas.DataSource = new List<GenericBE>();
            cmbOrgVtas.DataBind();

            cmbCanalDist.DataValueField = "Codigo";
            cmbCanalDist.DataTextField = "Descripcion";
            cmbCanalDist.DataSource = new List<GenericBE>();
            cmbCanalDist.DataBind();
        }

        private void cargarPedInstala(PedidoBE pPedido)
        {
            txtPedidoVenta12.Text = pPedido.PedidoVenta1;
            txtPedidoVenta22.Text = pPedido.PedidoVenta2;
            txtPedidoVenta32.Text = pPedido.PedidoVenta3;
            txtPedidoVenta42.Text = pPedido.PedidoVenta4;

            txtPedidoVisita12.Text = pPedido.PedidoVisita1;
            txtPedidoVisita22.Text = pPedido.PedidoVisita2;
            txtPedidoVisita32.Text = pPedido.PedidoVisita3;
            txtPedidoVisita42.Text = pPedido.PedidoVisita4;
        }

        private void cargarPedido(string numPedido, string op)
        {
            if (!txtNumPedido.Text.Trim().Equals(""))
            {
                _lvObjPedido = PedidoBC.Instance.leer(numPedido);
                //rhuapaya 25.06.2012 el descuento adicional solo para el Z001 @@@ 
                if (cmbTipoDocumento.SelectedValue == "Z001")
                {
                    lblDsctoAdicional.Visible = true;
                    lblEtiquetaDsctoAdicional.Visible = true;
                    hidDescuentoTotal.Visible = true;
                    txtDsctoAdicional.Visible = true;
                    txtDsctoAdicional.Enabled = true;
                    string desctoAdicionalZD12 = "";
                    //recuperamos el descuento adicional del pedido si es que lo hubiese
                    if (_lvObjPedido != null)
                    {
                        if (_lvObjPedido.Detalle != null || _lvObjPedido.Detalle.Count > 0)
                        {
                            if (_lvObjPedido.Detalle[0].DsctoAdicionalZD12 != null)
                            {
                                desctoAdicionalZD12 = Math.Abs(_lvObjPedido.Detalle[0].DsctoAdicionalZD12.Importe).ToString();            
                            }
                        }
                    }
                    txtDsctoAdicional.Text = desctoAdicionalZD12.Trim() != "" ? desctoAdicionalZD12 : "";
                    hidDescuentoTotal.Value = desctoAdicionalZD12.Trim() != "" ? desctoAdicionalZD12 : "";
                }
                else
                {
                    lblDsctoAdicional.Visible = false;
                    lblEtiquetaDsctoAdicional.Visible = false;
                    hidDescuentoTotal.Visible = false;
                    txtDsctoAdicional.Visible = false;
                }
                string pTipoDoc = cmbTipoDocumento.SelectedValue;
                if (ParametroBC.Instance.esTipoX(pTipoDoc, "CodPedDatServ"))
                {
                    this.bloquearCliente(true);
                    Session["ClienteBloqueado"] = true;
                    //--- Falta bloquear Interlocutores...
                    lnkShowPopUpServicios.Visible = true;
                    pnlServicios.Visible = true;

                    lnkShowPopUpTextos.Visible = false;
                    pnlTextos.Visible = false;
                }
                else
                {
                    lnkShowPopUpServicios.Visible = false;
                    pnlServicios.Visible = false;

                    lnkShowPopUpTextos.Visible = true;
                    pnlTextos.Visible = true;
                }

                Session["Pedido"] = _lvObjPedido;
                //si no existe:
                if (_lvObjPedido == null)
                {
                    Session["Mensaje"] = "No se encontró el Doc de Ventas";
                    Session.Remove("Operacion");
                    this.manejarBotonera();
                }
                else
                {
                        if (_lvObjPedido.Tratado && op == "editar")
                        {
                            //    Session["Mensaje"] = "El pedido ya ha sido tratado\r\nNo se puede modificar.";
                            //  btnGrabar.Enabled = false;
                            //btnGrabar.ImageUrl = "~/img/save.dis.png";
                            Session["PedidoTratado"] = true;
                        }
                        //para cargar la info del cliente:
                        if (_lvObjPedido != null && !string.IsNullOrEmpty(_lvObjPedido.CodCliente))
                        {
                            Session["Cliente"] = ClienteBC.Instance.leer(_lvObjPedido.CodCliente);
                            //ClienteBE objCliente = (ClienteBE)Session["Cliente"];
                            this.cargarInterlocutores();
                            this.cargaClienteSesion();
                            this.cargarInfoCliente();
                        }
                    
                    Session["Operacion"] = op;
                    this.manejarBotonera();

                    switch (op.ToLower())
                    {
                        case "editar":
                            if (_lvObjPedido.Tratado)
                            {
                                Session["Mensaje"] = "El pedido ya ha sido Facturado.";
                                //btnGrabar.Enabled = false;
                                //btnGrabar.ImageUrl = "~/img/save.dis.png";
                                Session["PedidoTratado"] = true;
                            }
                            //--- si no es una oferta, no se puede modificar el cliente.
                            if (!ParametroBC.Instance.esTipoOferta(_lvObjPedido.CodTipoDoc))
                            {
                                this.bloquearCliente(true);
                                Session["ClienteBloqueado"] = true;
                            }
                            else
                            {
                                this.bloquearCliente(false);
                            }
                            break;
                        case "ver":
                            if (_lvObjPedido.Tratado)
                            {
                                Session["Mensaje"] = "El pedido ya ha sido Facturado.";
                                btnGrabar.Enabled = false;
                                btnGrabar.ImageUrl = "~/img/save.dis.png";
                                Session["PedidoTratado"] = true;
                            }
                            //--- Por defect se deshabilita todas las opiciones.

                            this.deshabilitarVisualizacion(false);
                            break;
                        case "copiar":
                            //-- si es un pedido de servicios Z005, Z013, Z014, ZO02
                            string codTipoDocAnterior = _lvObjPedido.CodTipoDoc;
                            string codTipoDocNuevo = cmbTipoDocumento.SelectedValue;
                            bool esNCND = false;
                            //mtejada(21.11.2011):obtengo materiales para la instalación
                            if (codTipoDocNuevo.Equals("Z037"))
                            {
                                List<InstalaBE> lstInst = new List<InstalaBE>();
                                _lvObjPedido.Detalle = new List<DetalleBE>();
                                lstInst = PedidoBC.Instance.listadoInstalacion(numPedido);
                                foreach (InstalaBE inst in lstInst)
                                {
                                    addItem(inst.ZcodServ, inst.Cantidad);
                                }
                            }
                            //-- verificar que el pedido original no tenga entrega
                            if (ParametroBC.Instance.esTipoX(codTipoDocNuevo, "CodPedServ"))
                            {
                                if (codTipoDocAnterior == codTipoDocNuevo)
                                {
                                    // Error: No se pueden copiar dos pedidos de servicio
                                    _lvObjPedido = null;
                                    Session["Mensaje"] = ParametroBC.Instance.getParamValue("msgErrCopia");
                                    Session.Remove("Operacion");
                                    this.manejarBotonera();
                                    break;
                                }
                                else if (_lvObjPedido.TieneEntrega && !codTipoDocNuevo.Equals("Z036") && !codTipoDocNuevo.Equals("Z037"))
                                {
                                    //comentado a pedido de usuario decor, rhuapaya 03.07.2012 @@@
                                    //// Error: El pedido original ya tiene entrega.
                                    //_lvObjPedido = null;
                                    //Session["Mensaje"] = ParametroBC.Instance.getParamValue("msgErrServ");
                                    //Session.Remove("Operacion");
                                    //this.manejarBotonera();
                                    //break;
                                }
                            }

                            //--- si no es NC/ND, entonces se cargan los datos del usuario logeado
                            if (!ParametroBC.Instance.esTipoX(codTipoDocNuevo, "CodNCND"))
                            {
                                //si se crea uno nuevo si se carga la info del usuario loggeado
                                this.cargaDatosUsuario();
                            }
                            else
                            {//--- si es NC / ND no copiar la posición superior
                                esNCND = true;
                            }
                            //-- si es copia no se cargan los bloqueos
                            _lvObjPedido.BloqueoEntrega = "";
                            _lvObjPedido.BloqueoFactura = "";
                            _lvObjPedido.Fecha = DateTime.Now;
                            this.calculaFechaValidez();
                            _lvObjPedido.FechaValidez = Convert.ToDateTime(txtFechaValidez.Text);

                            if (!ParametroBC.Instance.esTipoServicio(codTipoDocAnterior))
                            {
                                if (ParametroBC.Instance.esTipoServicio(codTipoDocNuevo))
                                {
                                    _lvObjPedido.Detalle = new List<DetalleBE>();
                                }
                            }
                            //---
                            //-- no se copian los motivos de rechazo:
                            foreach (DetalleBE itm in _lvObjPedido.Detalle)
                            {
                                itm.MotivoRechazo = "";
                                //--- es nc/nd Y posición de combo (en oferta o pedido)
                                if (esNCND && itm.TipoPosicion != "Z017" && itm.TipoPosicion != "Z012")
                                {
                                    itm.PosSup = "0";
                                }
                                //si se copia de oferta a pedido, cambiar los tipos de posición (kit/combos)
                                #region cambio de TPOS
                                if (ParametroBC.Instance.esTipoOferta(codTipoDocAnterior) )
                                {
                                    if (!ParametroBC.Instance.esTipoOferta(codTipoDocNuevo) || codTipoDocNuevo.Equals("Z004"))
                                    {
                                        switch (itm.TipoPosicion)
                                        {
                                            case "Z016":
                                                itm.TipoPosicion = "Z011";
                                                break;
                                            case "Z017":
                                                itm.TipoPosicion = "Z012";
                                                break;
                                            case "Z014":
                                                itm.TipoPosicion = "Z007";
                                                break;
                                            case "Z015":
                                                itm.TipoPosicion = "Z008";
                                                break;
                                        }
                                    }
                                }
                                else
                                {
                                    if (ParametroBC.Instance.esTipoOferta(codTipoDocNuevo) || !codTipoDocNuevo.Equals("Z004"))
                                    {
                                        switch (itm.TipoPosicion)
                                        {
                                            case "Z011":
                                                itm.TipoPosicion = "Z016";
                                                break;
                                            case "Z012":
                                                itm.TipoPosicion = "Z017";
                                                break;
                                            case "Z007":
                                                itm.TipoPosicion = "Z014";
                                                break;
                                            case "Z008":
                                                itm.TipoPosicion = "Z015";
                                                break;
                                        }
                                    }
                                }
                                #endregion

                                itm.TipoPosAnt = itm.TipoPosicion;
                            }

                            //se le asigna el tipo de documento seleccionado
                            _lvObjPedido.CodTipoDoc = codTipoDocNuevo;
                            _lvObjPedido.DocOriginal = _lvObjPedido.NumPedido;
                            break;
                    }

                    Session["Pedido"] = _lvObjPedido;
                    if (_lvObjPedido != null)
                    {
                        Session["MaterialesList"] = _lvObjPedido.Detalle;
                    }
                    //this.cargaMateriales();
                    this.cargaPedido();
                    //rhuapaya 25.06.2012 @@@ solo para ver o editar esta habilitado
                    if (cmbTipoDocumento.SelectedValue == "Z001")
                    {
                        if (Session["Operacion"].ToString() == "ver")
                        {
                            txtDsctoAdicional.Enabled = false;
                        }
                        else
                        {
                            txtDsctoAdicional.Enabled = true;
                        }

                        lblEtiquetaDsctoAdicional.Visible = true;
                        lblDsctoAdicional.Visible = true;
                        txtDsctoAdicional.Visible = true;
                        hidDescuentoTotal.Visible = true;
                    }
                    else
                    {
                        txtDsctoAdicional.Text = "0.00";
                        hidDescuentoTotal.Value = "0.00";
                        lblEtiquetaDsctoAdicional.Visible = false;
                        lblDsctoAdicional.Visible = false;
                        txtDsctoAdicional.Visible = false;
                        hidDescuentoTotal.Visible = false;
                    }
                }
            }
            else
            {
                Session["Mensaje"] = "Debe ingresar el Número de Pedido";
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                try
                {
                    this.cargaClienteSesion();
                    this.cargarInterlocutores();
                    this.cargaCombos();
                    this.cargarInfoCliente();
                    //----
                    this.cargaPedido();
                    this.manejarBotonera();
                    //----
                    //this.cargaPedido();
                    //----
                    Session.Remove("Mensaje");
                    //txtTextoResultadoVisita.Enabled = false;                    
                    VerificaOpcionesUsuario(); //WEBDIST
                }
                catch (Exception ex)
                {
                    Session["Mensaje"] = ex.Message;
                }
            }
            else
            {
                try
                {
                    this.guardaPedido();
                }
                catch (Exception ex)
                {
                    Session["Mensaje"] = ex.Message;
                }
            }
        }

        private void cargaDatosUsuario()
        {
            if (Session["UsuarioWeb"] != null)
            {
                //string pCodOfVtas = "", pCodGrupoVend = "";
                RfcConfigParametersBE objUsuarioWeb = (RfcConfigParametersBE)Session["UsuarioWeb"];
                PersonaBE objPersonaWeb = (PersonaBE)Session["PersonaWeb"];
                //PersonaBC.Instance.getInfoUsuario(objUsuarioWeb.PerNr, out pCodOfVtas, out pCodGrupoVend);

                if (!string.IsNullOrEmpty(objUsuarioWeb.OfVentas)) { cmbOficina.SelectedValue = objUsuarioWeb.OfVentas; }
                if (!string.IsNullOrEmpty(objUsuarioWeb.GrpVend)) { gvGrpVendVal = objUsuarioWeb.GrpVend; }

                //rgutierrez 12.01.2012
                txtCodVendedor1.Text = objPersonaWeb.CodPersona;
                txtNomVendedor1.Text = objPersonaWeb.Descripcion;
                //txtCodVendedorWeb.Text = objPersonaWeb.CodPersona;
                //txtNomVendedorWeb.Text = objPersonaWeb.Descripcion;
            }
        }

        private void cargaClienteSesion(){
            if (Session["Cliente"] != null)
            {
                _lvObjCliente = (ClienteBE)Session["Cliente"];
                if (_lvObjCliente.Codigo != null)
                {
                    txtCodCliente.Text = _lvObjCliente.Codigo;
                    txtNomCliente.Text = _lvObjCliente.Descripcion;
                    txtDirCliente.Text = _lvObjCliente.Direccion;
                }
            }
        }

        private void cargaPedido()
        {
            if (Session["Pedido"] != null)
            {
                _lvObjPedido = (PedidoBE)Session["Pedido"];
                //--------------------------------

                if (!string.IsNullOrEmpty(_lvObjPedido.NumPedido))
                {
                    txtNumPedido.Text = _lvObjPedido.NumPedido;
                }
                if (!_lvObjPedido.OrgVentas.Equals(string.Empty))
                {
                    if (cmbOrgVtas.Items.FindByValue(_lvObjPedido.OrgVentas) != null)
                    {
                        cmbOrgVtas.SelectedValue = _lvObjPedido.OrgVentas;
                    }
                }
                if (!_lvObjPedido.CanalDist.Equals(string.Empty))
                {
                    if (cmbCanalDist.Items.FindByValue(_lvObjPedido.CanalDist) != null)
                    {
                        cmbCanalDist.SelectedValue = _lvObjPedido.CanalDist;
                    }
                }
                foreach (DetalleBE item in  _lvObjPedido.Detalle)
                {
                    item.TipoMaterial = item.Material.TipoMaterial;
                }
                //-----------------------
                //rgutierrez 17.01.2012
                if (!_lvObjPedido.CodTipoDoc.Equals(string.Empty))
                {
                    cmbTipoDocumento.SelectedValue = _lvObjPedido.CodTipoDoc;
                }

                cgvMateriales.DataSource = _lvObjPedido.Detalle;
                //string codTipoDocNuevo = cmbTipoDocumento.SelectedValue; //rgutierrez 17.01.2012
                cgvMateriales.DataBind();

                //--- validar si viene vacío
                if (!_lvObjPedido.CodOficina.Equals(string.Empty))
                {
                    cmbOficina.SelectedValue = _lvObjPedido.CodOficina;
                }

                //-----------------------
                //rgutierrez 17.01.2012
                //if (!_lvObjPedido.CodTipoDoc.Equals(string.Empty))
                //{
                //    cmbTipoDocumento.SelectedValue = _lvObjPedido.CodTipoDoc;
                //}

                if (ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue.ToString().Trim(), "Calzada"))
                {
                    btnPlanFact.ImageUrl = "~/img/stockET.png";
                    btnPlanFact.Enabled = true;
                }
                else
                {
                    btnPlanFact.ImageUrl = "~/img/stock.png";
                    btnPlanFact.Enabled = false;
                }
                cmbBloqueoEntrega.SelectedValue = _lvObjPedido.BloqueoEntrega;
                cmbMoneda.SelectedValue = _lvObjPedido.Moneda;

                cmbCondicionesPago.SelectedValue = _lvObjPedido.CondPago;
                cmbBloqueoFactura.SelectedValue = _lvObjPedido.BloqueoFactura;

                cmbCondExp.SelectedValue = _lvObjPedido.CondExp;
                cmbGrupoCond.SelectedValue = _lvObjPedido.GrupoCond;
                cmbMotivo.SelectedValue = _lvObjPedido.Motivo;

                //INICIO mtejada: pedido de visitas 09.09.2011
                lnkShowPopUpTextosVisita.Text = "";
                if (cmbTipoDocumento.SelectedValue.Equals("Z036"))
                {
                    cmbTipoVisita.Enabled = true;
                    cbxReembolsable.Enabled = true;
                    cmbTipoVisita.SelectedValue = _lvObjPedido.TipoVisita;
                    cbxReembolsable.Checked = _lvObjPedido.Reenbolsable;
                    lnkShowPopUpTextosVisita.Text = "Datos de la visita";
                    lnkShowPedidosAsocidos.Text = "";
                }
                else if (cmbTipoDocumento.SelectedValue.Equals("Z037"))
                {
                    cmbTipoVisita.Enabled = false;
                    cbxReembolsable.Enabled = false;
                    lnkShowPopUpTextosVisita.Text = "";
                    lnkShowPedidosAsocidos.Text = "Pedidos Asociados";
                    lnkShowPopUpTextosVisita.Text = "Datos de la instalación";
                    tpDescVisita.Visible = false;
                    tpDescInstala.Visible = true;
                    cargarPedInstala(_lvObjPedido);
                }
                //FIN PEDIDO DE VISITAS

                txtOrdenCompra.Text = _lvObjPedido.OrdenCompra;
                txtTipoCambio.Text = _lvObjPedido.TipoCambio.ToString();

                txtFecha.Text = _lvObjPedido.FechaString;
                txtFechaValidez.Text = _lvObjPedido.FechaValidezString;
                txtFechaEntrega.Text = _lvObjPedido.FechaEntregaString;
                txtFechaFact.Text = _lvObjPedido.FechaFacturacion.ToShortDateString();

                //rhuapaya 14.02.2012
                txtNomProyecto.Text = _lvObjPedido.nomProyecto;

                //agregar cod de proyecto y version
                txtCodProyecto.Text = _lvObjPedido.codProyecto;
                txtCodVersion.Text = _lvObjPedido.codVersion;

                //-- Servicios:
                //try
                //{
                //    ddlTransporte.SelectedValue = _lvObjPedido.Ztransporte;
                //}
                //catch { }
                txtNpisos.Text = _lvObjPedido.Znpiso;
                chkAscensor.Checked = _lvObjPedido.Zasensor;
                //-------------

                //-- numericos
                txtPesoTotal.Text = string.Format("{0:n3}", _lvObjPedido.PesoTotal);

                lblSimbTotal.Text = lblSimbSubtotal.Text = ParametroBC.Instance.getParamValue(_lvObjPedido.Moneda);
                lblMensajeTC.Text = _lvObjPedido.Moneda == "PEN" ? "" : ParametroBC.Instance.getParamValue("msgWarningTC");

                txtSubtotal.Text = string.Format("{0:n2}", _lvObjPedido.SubTotal);
                txtIgv.Text = string.Format("{0:n2}", _lvObjPedido.Igv);
                txtTotal.Text = string.Format("{0:n2}", _lvObjPedido.Total);

                //percepcion
                txtPercep.Text = string.Format("{0:n2}", _lvObjPedido.Percepcion);

                //rhuapaya 25.06.2012 @@@
                if (txtDsctoAdicional.Text.Trim() != "" && Convert.ToDecimal(txtDsctoAdicional.Text) != 0)
                {
                    _lvObjPedido.dsctoAdicionalZD12 = Convert.ToDecimal(txtDsctoAdicional.Text);
                    txtDsctoAdicional.Text = Math.Abs(_lvObjPedido.dsctoAdicionalZD12).ToString();    
                }

                //mtejada 05.03.2013: total descuentos
                txtTotalDcto.Text = Convert.ToString(_lvObjPedido.TotalDcto);
                //mtejada 05.03.2013: total descuentos
                txtTotalDcto.Text = String.Format("{0:0,0.00}", _lvObjPedido.TotalDcto.ToString());
                //-----------------------
                Session["Pedido"] = _lvObjPedido;
                this.cargaTextosSession();
                this.cargaInterlocutoresSession();
            }
        }

        private void guardaPedido()
        {
            _lvObjPedido = Session["Pedido"] != null ? (PedidoBE)Session["Pedido"] : new PedidoBE();

            _lvObjPedido.CodCliente = (Session["Cliente"] != null?((ClienteBE)Session["Cliente"]).Codigo : "");

            if (txtNumPedido.Text != string.Empty) { _lvObjPedido.NumPedido = txtNumPedido.Text; }
            //---
            _lvObjPedido.OrgVentas = cmbOrgVtas.SelectedValue;
            _lvObjPedido.CanalDist = cmbCanalDist.SelectedValue;
            _lvObjPedido.Sector = gvSectorVal; //cmbSector.SelectedValue;
            //-----------------------
            _lvObjPedido.CodOficina = cmbOficina.SelectedValue;
            _lvObjPedido.CodGrupoVend = gvGrpVendVal; //cmbGrupoVendedores.SelectedValue;
            //-----------------------
            _lvObjPedido.CodTipoDoc = cmbTipoDocumento.SelectedValue;
            _lvObjPedido.BloqueoEntrega = cmbBloqueoEntrega.SelectedValue;
            _lvObjPedido.Moneda = cmbMoneda.SelectedValue;

            _lvObjPedido.CondPago = cmbCondicionesPago.SelectedValue;
            _lvObjPedido.BloqueoFactura = cmbBloqueoFactura.SelectedValue;

            _lvObjPedido.CondExp = cmbCondExp.SelectedValue;
            _lvObjPedido.GrupoCond = cmbGrupoCond.SelectedValue;
            _lvObjPedido.Motivo = cmbMotivo.SelectedValue;

            _lvObjPedido.OrdenCompra = txtOrdenCompra.Text;
            _lvObjPedido.TipoCambio = Convert.ToDecimal(txtTipoCambio.Text);

            _lvObjPedido.Fecha = Convert.ToDateTime(txtFecha.Text);
            _lvObjPedido.FechaValidez = Convert.ToDateTime(txtFechaValidez.Text);
            _lvObjPedido.FechaEntrega = !txtFechaEntrega.Text.Equals("") ? Convert.ToDateTime(txtFechaEntrega.Text) : DateTime.Today;

            //INICIO VISITAS: mtejada 09.09.2011
            if (ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "DocsTextosVisitas"))
            {
                _lvObjPedido.TipoVisita = cmbTipoVisita.SelectedValue;  //Order_Header_In.H_Curr = pObjPedido.TipoVisita;
                _lvObjPedido.Reenbolsable = cbxReembolsable.Checked;    //) { Order_Header_In.Calc_Motive = "X"; }
            }
           //FIN VISITAS: mtejada 09.09.2011

            //rhuapaya 14.02.2012
            _lvObjPedido.nomProyecto = txtNomProyecto.Text;

            //-----------------------

            //aregar codigo de version y cod de proyecto
            _lvObjPedido.codProyecto =  txtCodProyecto.Text;
            _lvObjPedido.codVersion = txtCodVersion.Text;

            _lvObjPedido.Zasensor = chkAscensor.Checked;
            _lvObjPedido.Znpiso = txtNpisos.Text;
            //_lvObjPedido.Ztransporte = ddlTransporte.SelectedValue;

            //PedidoBE tmpPedido = (PedidoBE)Session["Pedido"];
            decimal dctoAnteriorZd00 = 0m;
            //guardando items:
            List<DetalleBE> pListaDetalle = new List<DetalleBE>();
            foreach(GridViewRow dli in cgvMateriales.Rows)
            {
                DetalleBE pObjDetalleBE = new DetalleBE();

                HiddenField hidUMedidaRendimiendo = (HiddenField)dli.FindControl("hidUMedidaRendimiendo");
                HiddenField hidValorRendimiento = (HiddenField)dli.FindControl("hidValorRendimiento");
                HiddenField hidPeso = (HiddenField)dli.FindControl("hidPeso");

                HiddenField hidMaterialId = (HiddenField)dli.FindControl("hidMaterialId");
                TextBox lblDescMaterial = (TextBox)dli.FindControl("lblDescMaterial");
                TextBox txtCantidad = (TextBox)dli.FindControl("txtCantidad");
                Label lblUMedida = (Label)dli.FindControl("lblUMedida");
                //Label lblPrecioItem = (Label)dli.FindControl("lblPrecioItem");
                //Label lblSubTotalItem = (Label)dli.FindControl("lblSubTotalItem");
                TextBox lblTipoPosicion = (TextBox)dli.FindControl("lblTipoPosicion");
                Label lblPosSup = (Label)dli.FindControl("lblPosSup");
                //---
                //TextBox txtFechaEntregaItm = (TextBox)dli.FindControl("txtFechaEntrega");
                DropDownList cmbPrioridadEnt = (DropDownList)dli.FindControl("cmbPrioridadEnt");
                DropDownList cmbGrupoMat = (DropDownList)dli.FindControl("cmbGrupoMat");
                DropDownList cmbMotivoRechazo = (DropDownList)dli.FindControl("cmbMotivoRechazo");
                //---
                DropDownList cmbCentro = (DropDownList)dli.FindControl("cmbCentro");
                DropDownList cmbAlmacen = (DropDownList)dli.FindControl("cmbAlmacen");
                DropDownList cmbLote = (DropDownList)dli.FindControl("cmbLote");

                //ImageButton ibtnBorrar = (ImageButton)dli.FindControl("ibtnBorrar");
                HiddenField hidPosicion = (HiddenField)dli.FindControl("hidPosicion");
                pObjDetalleBE.Posicion = hidPosicion.Value;

                //--- Campos Zs
                CheckBox chkServicio = (CheckBox)dli.FindControl("chkServicio");
                pObjDetalleBE.Zservicio = chkServicio.Checked;
                //-------------

                pObjDetalleBE.CodMaterial = hidMaterialId.Value;
                pObjDetalleBE.DescMaterial = lblDescMaterial.Text;
                pObjDetalleBE.CodUMedida = lblUMedida.Text;

                pObjDetalleBE.TipoPosicion = lblTipoPosicion.Text;
                pObjDetalleBE.PosSup = lblPosSup.Text;

                try { 
                    pObjDetalleBE.Cantidad = Convert.ToDecimal(txtCantidad.Text); 
                }
                catch (Exception ex) { Session["Mensaje"] += "- Item " + pObjDetalleBE.Posicion + ": " + ex.Message + "\r\n"; }
                

                //--------------------
                //pObjDetalleBE.FechaEntrega = txtFechaEntregaItm.Text.Equals("") ? new DateTime() : Convert.ToDateTime(txtFechaEntregaItm.Text);
                pObjDetalleBE.PrioridadEntrega = cmbPrioridadEnt.SelectedValue; 
                pObjDetalleBE.CodGrupoMat = cmbGrupoMat.SelectedValue;
                pObjDetalleBE.MotivoRechazo = cmbMotivoRechazo.SelectedValue;

                pObjDetalleBE.ValorRendimiento = Convert.ToDecimal(hidValorRendimiento.Value);
                pObjDetalleBE.UMedidaRendimiendo = hidUMedidaRendimiendo.Value;
                pObjDetalleBE.Peso = Convert.ToDecimal(hidPeso.Value);

                //--- material, cantcomp:
                if (_lvObjPedido != null && _lvObjPedido.Detalle != null)
                {
                    List<DetalleBE> lstDetalle = _lvObjPedido.Detalle;
                    DetalleBE objItem = lstDetalle.Find(delegate(DetalleBE obj) { return obj.Posicion == pObjDetalleBE.Posicion; });

                    if (objItem.CambAlmacen)
                        pObjDetalleBE.CambAlmacen = objItem.CambAlmacen;
                    
                    if (!string.IsNullOrEmpty(cmbCentro.SelectedValue) && !objItem.CambAlmacen)
                        if (!objItem.CodCentro.Equals(cmbCentro.SelectedValue))
                            pObjDetalleBE.CambAlmacen = true;

                    pObjDetalleBE.TipoPosAnt = objItem.TipoPosAnt;
                    pObjDetalleBE.Material = objItem.Material;
                    pObjDetalleBE.CantComp = objItem.CantComp;
                    pObjDetalleBE.Repartos = objItem.Repartos;
                    pObjDetalleBE.Percepcion = objItem.Percepcion;
                    pObjDetalleBE.TotPercep = objItem.TotPercep;

                    //rgutierrez 06.12.2011
                    pObjDetalleBE.DctoAdicionalPorc = objItem.DctoAdicionalPorc;
                    pObjDetalleBE.DctoDecorPorc = objItem.DctoDecorPorc;
                    pObjDetalleBE.DctoEstadisticoPorc = objItem.DctoEstadisticoPorc;
                    pObjDetalleBE.DctoGerenciaMonto = objItem.DctoGerenciaMonto;
                    pObjDetalleBE.DctoGerenciaPorc = objItem.DctoGerenciaPorc;
                    pObjDetalleBE.DctoGenerico = objItem.DctoGenerico;
                    pObjDetalleBE.DctoZD11 = objItem.DctoZD11;
                    pObjDetalleBE.DctoGenericoZD08 = objItem.DctoGenericoZD08;
                    pObjDetalleBE.DctoZD06 = objItem.DctoZD06;
                    //rhuapaya 22.06.2012 @@@
                    validaDsctoAdicional = true;
                    if (txtDsctoAdicional.Text.Trim() != "" && Convert.ToDecimal(txtDsctoAdicional.Text) != 0)
                    {
                        if (Convert.ToDecimal(hfDsctoAdi.Value) != Convert.ToDecimal(txtDsctoAdicional.Text))
                        {
                            validaDsctoAdicional = false;
                        }
                        else
                        {
                            DescuentoBE objD = new DescuentoBE();
                            objD.Importe = Convert.ToDecimal(txtDsctoAdicional.Text);
                            if (objItem.DsctoAdicionalZD12 != null)
                            {
                                if (objItem.DsctoAdicionalZD12.Importe != 0)
                                {
                                    objD.Importe = objItem.DsctoAdicionalZD12.Importe;
                                }
                                objD.Condicion = objItem.DsctoAdicionalZD12.Condicion;
                                objD.Valor = objItem.DsctoAdicionalZD12.Valor;
                            }
                            pObjDetalleBE.DsctoAdicionalZD12 = objD;  
                        }
                          
                    }
                    //else
                    //{
                    //    validaDsctoAdicional = false;
                    //}
                    //--- validar dcto ZD00 con TC00 y TD00
                    //--- recuperando el valor antigüo de la cond zd00
                    dctoAnteriorZd00 = 0m;
                    if (objItem.DctoDecorPorc != null)
                    {
                        if (!(objItem.DctoDecorPorc.Importe == 0m))
                        {
                            dctoAnteriorZd00 = objItem.DctoDecorPorc.Importe;
                        }
                    }
                }

                pObjDetalleBE.CodCentro = cmbCentro.SelectedValue;
                pObjDetalleBE.CodAlmacen = cmbAlmacen.SelectedValue;
                pObjDetalleBE.CodLote = cmbLote.SelectedValue;
                //-- suma total de dctos
                LinkButton lnkDctoTotal = (LinkButton)dli.FindControl("lnkDctoTotal");
                //--------------------------------------------------------------------
                //-- panel descuentos ------------------------------------------------
                //--------------------------------------------------------------------
                //rgutierrez 05.12.2011
                //HtmlTable tblDescuentos = (HtmlTable)dli.FindControl("tblDescuentos");
                //HtmlTableRow htmlTrow;
                //TextBox txtImporte;
                //HiddenField hidClaseCondicion;
                //Label lblValor;
                //TextBox txtDctoDecorPorc = new TextBox();
                //TextBox txtDctoAdicionalPorc = new TextBox();
                //Label lblDctoAdicionalPorc = new Label();
                //TextBox txtDctoEstadisticoPorc = new TextBox();
                //Label lblDctoEstadisticoPorc = new Label();
                //TextBox txtDctoGerenciaPorc = new TextBox();
                //Label lblDctoGerenciaPorc = new Label();
                //TextBox txtDctoGerenciaMonto = new TextBox();
                //Label lblDctoGerenciaMonto = new Label();
                //TextBox txtDctoZD06 = new TextBox();
                //Label lblDctoZD06 = new Label();
                //for (int i = 0; i < tblDescuentos.Rows.Count; i++)
                //{
                //    htmlTrow = tblDescuentos.Rows[i];
                //    txtImporte = (TextBox)htmlTrow.FindControl("txtImporte" + i.ToString());
                //    hidClaseCondicion = (HiddenField)htmlTrow.FindControl("hidClaseCondicion" + i.ToString());
                //    lblValor = (Label)htmlTrow.FindControl("lblValor" + i.ToString());

                //    if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondDctoDecorPorc"))
                //    {
                //        txtDctoDecorPorc.Text = txtImporte.Text;
                //    }
                //    else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondDctoAdicionalPorc"))
                //    {
                //        txtDctoAdicionalPorc.Text = txtImporte.Text;
                //        lblDctoAdicionalPorc.Text = lblValor.Text;
                //    }
                //    else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondDctoEstadisticoPorc"))
                //    {
                //        txtDctoEstadisticoPorc.Text = txtImporte.Text;
                //        lblDctoEstadisticoPorc.Text = lblValor.Text;
                //    }
                //    else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondDctoGerenciaPorc"))
                //    {
                //        txtDctoGerenciaPorc.Text = txtImporte.Text;
                //        lblDctoGerenciaPorc.Text = lblValor.Text;
                //    }
                //    else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondDctoGerenciaMonto"))
                //    {
                //        txtDctoGerenciaMonto.Text = txtImporte.Text;
                //        lblDctoGerenciaMonto.Text = txtImporte.Text;
                //    }
                //    else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondZD06"))
                //    {
                //        txtDctoZD06.Text = txtImporte.Text;
                //        lblDctoZD06.Text = lblValor.Text;
                //    }
                //}

                //TextBox txtDctoZD06 = (TextBox)dli.FindControl("txtDctoZD06"); //rgutierrez 05.12.2011
                //Label lblDctoZD06 = (Label)dli.FindControl("lblDctoZD06"); //rgutierrez 05.12.2011
                //rgutierrez 06.12.2011
                //DescuentoBE objDctoZD06 = new DescuentoBE(ParametroBC.Instance.getParamValue("CondZD06"));
                //objDctoZD06.Importe = txtDctoZD06.Text == string.Empty ? 0m : Convert.ToDecimal(txtDctoZD06.Text);
                //objDctoZD06.Valor = lblDctoZD06.Text == string.Empty ? 0m : Convert.ToDecimal(lblDctoZD06.Text);

                TextBox txtPreZP08 = (TextBox)dli.FindControl("txtPreZP08");
                Label lblPreZP08 = (Label)dli.FindControl("lblPreZP08");
                DescuentoBE objPreZP08 = new DescuentoBE(ParametroBC.Instance.getParamValue("CondPrecio8"));
                objPreZP08.Importe = txtPreZP08.Text == string.Empty ? 0m : Convert.ToDecimal(txtPreZP08.Text);
                objPreZP08.Valor = lblPreZP08.Text == string.Empty ? 0m : Convert.ToDecimal(lblPreZP08.Text);
                //------------------------------------------
              
			    Label lblPrecio = (Label)dli.FindControl("lblPrecio");
                Label lblPrecioUnitario = (Label)dli.FindControl("lblPrecioUnitario");
                //--- igv
                Label lblIgvUnitario = (Label)dli.FindControl("lblIgvUnitario");
                Label lblIgvTotal = (Label)dli.FindControl("lblIgvTotal");
                //--- dif zp01
                TextBox txtDiferencia = (TextBox)dli.FindControl("txtDiferencia");
                Label lblDiferencia = (Label)dli.FindControl("lblDiferencia");

                Label lblTotalDctos = (Label)dli.FindControl("lblTotalDctos");
                //Label lblPrecioNeto = (Label)dli.FindControl("lblPrecioNeto");

                //TextBox txtDctoDecorPorc = (TextBox)dli.FindControl("txtDctoDecorPorc"); //rgutierrez 05.12.2011
                //Label lblDctoDecorPorc = (Label)dli.FindControl("lblDctoDecorPorc"); //rgutierrez 05.12.2011

                DescuentoBE objPrecio = new DescuentoBE();
                objPrecio.Condicion = ParametroBC.Instance.getParamValue("CondPrecio");
                objPrecio.Importe = lblPrecioUnitario.Text == string.Empty ? 0.00m : Convert.ToDecimal(lblPrecioUnitario.Text);
                objPrecio.Valor = lblPrecio.Text == string.Empty ? 0.00m : Convert.ToDecimal(lblPrecio.Text);

                DescuentoBE objIgv = new DescuentoBE();
                objIgv.Condicion = ParametroBC.Instance.getParamValue("CondIgv");
                objIgv.Importe = lblIgvUnitario.Text == string.Empty ? 0.00m : Convert.ToDecimal(lblIgvUnitario.Text);
                objIgv.Valor = lblIgvTotal.Text == string.Empty ? 0.00m : Convert.ToDecimal(lblIgvTotal.Text);

                //--- diferencia ZP01
                decimal diferenciaZp01 = txtDiferencia.Text == string.Empty ? 0.00m : Convert.ToDecimal(txtDiferencia.Text);
                DescuentoBE objDiferencia = new DescuentoBE();
                objDiferencia.Condicion = ParametroBC.Instance.getParamValue("CondPrecio1");
                objDiferencia.Importe = diferenciaZp01;
                objDiferencia.Valor = lblDiferencia.Text.Equals("") ? 0.00m : Convert.ToDecimal(lblDiferencia.Text);
                //--------------------

                //rgutierrez 06.12.2011
                //decimal dctoActualZd00 = txtDctoDecorPorc.Text == string.Empty ? 0.00m : Convert.ToDecimal(txtDctoDecorPorc.Text);
                //DescuentoBE objDctoDecorPorc = new DescuentoBE();
                //objDctoDecorPorc.Condicion = ParametroBC.Instance.getParamValue("CondDctoDecorPorc");
                //objDctoDecorPorc.Importe = dctoActualZd00;
                //objDctoDecorPorc.ImporteAnterior = dctoAnteriorZd00;

                //objDctoDecorPorc.Valor = lblDctoDecorPorc.Text == string.Empty ? 0.00m : Convert.ToDecimal(lblDctoDecorPorc.Text);
                //---
                //TextBox txtDctoAdicionalPorc = (TextBox)dli.FindControl("txtDctoAdicionalPorc"); //rgutierrez 05.12.2011
                //Label lblDctoAdicionalPorc = (Label)dli.FindControl("lblDctoAdicionalPorc"); //rgutierrez 05.12.2011
                //rgutierrez 06.12.2011
                //DescuentoBE objDctoAdicionalPorc = new DescuentoBE();
                //objDctoAdicionalPorc.Condicion = ParametroBC.Instance.getParamValue("CondDctoAdicionalPorc");
                //objDctoAdicionalPorc.Importe = txtDctoAdicionalPorc.Text == string.Empty ? 0.00m : Convert.ToDecimal(txtDctoAdicionalPorc.Text);
                //objDctoAdicionalPorc.Valor = lblDctoAdicionalPorc.Text == string.Empty ? 0.00m : Convert.ToDecimal(lblDctoAdicionalPorc.Text);
                //---------------------
                //TextBox txtDctoEstadisticoPorc = (TextBox)dli.FindControl("txtDctoEstadisticoPorc"); //rgutierrez 05.12.2011
                //Label lblDctoEstadisticoPorc = (Label)dli.FindControl("lblDctoEstadisticoPorc"); //rgutierrez 05.12.2011
                //rgutierrez 06.12.2011
                //DescuentoBE objDctoEstadisticoPorc = new DescuentoBE();
                //objDctoEstadisticoPorc.Condicion = ParametroBC.Instance.getParamValue("CondDctoEstadisticoPorc");
                //objDctoEstadisticoPorc.Importe = txtDctoEstadisticoPorc.Text == string.Empty ? 0.00m : Convert.ToDecimal(txtDctoEstadisticoPorc.Text);
                //objDctoEstadisticoPorc.Valor = lblDctoEstadisticoPorc.Text == string.Empty ? 0.00m : Convert.ToDecimal(lblDctoEstadisticoPorc.Text);
                //---
                //TextBox txtDctoGerenciaPorc = (TextBox)dli.FindControl("txtDctoGerenciaPorc"); //rgutierrez 05.12.2011
                //Label lblDctoGerenciaPorc = (Label)dli.FindControl("lblDctoGerenciaPorc"); //rgutierrez 05.12.2011
                //rgutierrez 06.12.2011
                //DescuentoBE objDctoGerenciaPorc = new DescuentoBE();
                //objDctoGerenciaPorc.Condicion = ParametroBC.Instance.getParamValue("CondDctoGerenciaPorc");
                //objDctoGerenciaPorc.Importe = txtDctoGerenciaPorc.Text == string.Empty ? 0.00m : Convert.ToDecimal(txtDctoGerenciaPorc.Text);
                //objDctoGerenciaPorc.Valor = lblDctoGerenciaPorc.Text == string.Empty ? 0.00m : Convert.ToDecimal(lblDctoGerenciaPorc.Text);
                //---
                //TextBox txtDctoGerenciaMonto = (TextBox)dli.FindControl("txtDctoGerenciaMonto"); //rgutierrez 05.12.2011
                //Label lblDctoGerenciaMonto = (Label)dli.FindControl("lblDctoGerenciaMonto"); //rgutierrez 05.12.2011
                //rgutierrez 06.12.2011
                //DescuentoBE objDctoGerenciaMonto = new DescuentoBE();
                //objDctoGerenciaMonto.Condicion = ParametroBC.Instance.getParamValue("CondDctoGerenciaMonto");
                //objDctoGerenciaMonto.Importe = txtDctoGerenciaMonto.Text == string.Empty ? 0.00m : Convert.ToDecimal(txtDctoGerenciaMonto.Text);
                //objDctoGerenciaMonto.Valor = lblDctoGerenciaMonto.Text == string.Empty ? 0.00m : Convert.ToDecimal(lblDctoGerenciaMonto.Text);
                //***
                //rgutierrez 06.12.2011
                //DescuentoBE objDcto = new DescuentoBE();
                //objDcto = _lvObjPedido.Detalle.Find(x => x.Posicion.Trim('0').Equals(hidPosicion.Value.Trim('0')) &&
                //                                         x.CodMaterialCorto.Trim('0').Equals(hidMaterialId.Value.Trim('0'))).DctoGenerico;
                //***
                //rgutierrez 06.12.2011
                //DescuentoBE objDcto11 = new DescuentoBE();
                //objDcto11 = _lvObjPedido.Detalle.Find(x => x.Posicion.Trim('0').Equals(hidPosicion.Value.Trim('0')) &&
                //                                         x.CodMaterialCorto.Trim('0').Equals(hidMaterialId.Value.Trim('0'))).DctoZD11;

                //rgutierrez 06.12.2011
                //DescuentoBE objDcto08 = new DescuentoBE();
                //objDcto08 = _lvObjPedido.Detalle.Find(x => x.Posicion.Trim('0').Equals(hidPosicion.Value.Trim('0')) &&
                //                                         x.CodMaterialCorto.Trim('0').Equals(hidMaterialId.Value.Trim('0'))).DctoGenericoZD08;

                //---------------------                
                pObjDetalleBE.Diferencia = objDiferencia;
                pObjDetalleBE.Precio = objPrecio;
                pObjDetalleBE.Igv = objIgv;
                pObjDetalleBE.PreZP08 = objPreZP08;

                //rgutierrez 06.12.2011
                //pObjDetalleBE.DctoAdicionalPorc = objDctoAdicionalPorc;
                //pObjDetalleBE.DctoDecorPorc = objDctoDecorPorc;
                //pObjDetalleBE.DctoEstadisticoPorc = objDctoEstadisticoPorc;
                //pObjDetalleBE.DctoGerenciaMonto = objDctoGerenciaMonto;
                //pObjDetalleBE.DctoGerenciaPorc = objDctoGerenciaPorc;
                //pObjDetalleBE.DctoGenerico = objDcto;
                //pObjDetalleBE.DctoZD11 = objDcto11;
                //pObjDetalleBE.DctoGenericoZD08 = objDcto08;//RGF 20111108
                //pObjDetalleBE.DctoZD06 = objDctoZD06;


                pListaDetalle.Add(pObjDetalleBE);
            }
            _lvObjPedido.Detalle = pListaDetalle;
            Session["MaterialesList"] = _lvObjPedido.Detalle;
            Session["Pedido"] = _lvObjPedido;
            this.guardaInterlocutores();
            this.guardaTextos();
            if (_lvObjPedido != null)
            {
            cargarPedInstala(_lvObjPedido);
            }
        }

        private void guardaTextos()
        {
            List<TextoBE> lstTextos = new List<TextoBE>();

            TextoBE objTextoAtencion = new TextoBE();
            objTextoAtencion.CodTexto = ParametroBC.Instance.getParamValue("TextoAtencion");
            objTextoAtencion.Descripcion =  txtTextoAtencion.Text;

            lstTextos.Add(objTextoAtencion);

            TextoBE objTextoTransporte = new TextoBE();
            objTextoTransporte.CodTexto = ParametroBC.Instance.getParamValue("TextoTransporte");
            objTextoTransporte.Descripcion = "";//  txtTextoTransporte.Text;

            lstTextos.Add(objTextoTransporte);

            TextoBE objTextoTiempoEntrega = new TextoBE();
            objTextoTiempoEntrega.CodTexto = ParametroBC.Instance.getParamValue("TextoTiempoEntrega");
            objTextoTiempoEntrega.Descripcion = "";//  txtTextoTiempoEntrega.Text;

            lstTextos.Add(objTextoTiempoEntrega);

            TextoBE objTextoJefeTienda = new TextoBE();
            objTextoJefeTienda.CodTexto = ParametroBC.Instance.getParamValue("TextoJefeTienda");
            objTextoJefeTienda.Descripcion = "";//  txtTextoJefeTienda.Text;

            lstTextos.Add(objTextoJefeTienda);

            TextoBE objTextoObsAdministrativas = new TextoBE();
            objTextoObsAdministrativas.CodTexto = ParametroBC.Instance.getParamValue("TextoObsAdministrativas");
            objTextoObsAdministrativas.Descripcion = txtTextoObsAdministrativas.Text;

            lstTextos.Add(objTextoObsAdministrativas);

            TextoBE objTextoRefFactura = new TextoBE();
            objTextoRefFactura.CodTexto = ParametroBC.Instance.getParamValue("TextoRefFactura");
            objTextoRefFactura.Descripcion = txtTextoRefFactura.Text;

            lstTextos.Add(objTextoRefFactura);

            TextoBE objTextoRefDireccion = new TextoBE();
            objTextoRefDireccion.CodTexto = ParametroBC.Instance.getParamValue("TextoRefDireccion");
            objTextoRefDireccion.Descripcion = txtTextoRefDireccion.Text;

            lstTextos.Add(objTextoRefDireccion);

            //INICIO VISITAS: mtejada 09.09.2011
            if (ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue,"DocsTextosVisitas"))
            {
                TextoBE objTextoContactoVisita = new TextoBE();
                objTextoContactoVisita.CodTexto = ParametroBC.Instance.getParamValue("TextoContactoVisita");
                objTextoContactoVisita.Descripcion = txtTextoContactoVisita.Text;
                lstTextos.Add(objTextoContactoVisita);

                TextoBE objTextoDatosAdicVisita = new TextoBE();
                objTextoDatosAdicVisita.CodTexto = ParametroBC.Instance.getParamValue("TextoDatosAdicVisita");
                objTextoDatosAdicVisita.Descripcion = txtTextDatosAdicClienteVisita.Text;
                lstTextos.Add(objTextoDatosAdicVisita);

                TextoBE objTextoResultadoVisita = new TextoBE();
                objTextoResultadoVisita.CodTexto = ParametroBC.Instance.getParamValue("TextoResultadoVisita");
                objTextoResultadoVisita.Descripcion = txtTextoResultadoVisita.Text;
                lstTextos.Add(objTextoResultadoVisita);
                
                TextoBE objTextoTelefonoVisita = new TextoBE();
                objTextoTelefonoVisita.CodTexto = ParametroBC.Instance.getParamValue("TextoTelefonoVisita");
                objTextoTelefonoVisita.Descripcion = txtTextTelefonosVisita.Text;
                lstTextos.Add(objTextoTelefonoVisita);

                if (cmbTipoDocumento.SelectedValue.Equals("Z036"))
                {
                    TextoBE objTextoDescripVisita = new TextoBE();
                    objTextoDescripVisita.CodTexto = ParametroBC.Instance.getParamValue("TextoDescripVisita");
                    objTextoDescripVisita.Descripcion = txtTextDescVisita.Text;
                    lstTextos.Add(objTextoDescripVisita);
                }

                if (cmbTipoDocumento.SelectedValue.Equals("Z037"))
                {
                    TextoBE objTextoDescripInstala = new TextoBE();
                    objTextoDescripInstala.CodTexto = ParametroBC.Instance.getParamValue("TextoDescripInstala");
                    objTextoDescripInstala.Descripcion = txtTextDescInstala.Text;
                    lstTextos.Add(objTextoDescripInstala);
                }
            }
            //FIN VISITAS: mtejada 09.09.2011

            //_lvObjPedido.Textos = lstTextos;
            //Session["Pedido"] = _lvObjPedido;

            Session["Textos"] = lstTextos;
            _lvObjPedido = (PedidoBE)Session["Pedido"];
            _lvObjPedido.Textos = lstTextos;
            Session["Pedido"] = _lvObjPedido;
        }

        private void cargaTextosSession()
        {
            if (Session["Pedido"] != null)
            {
                PedidoBE objTmpPed = (PedidoBE)Session["Pedido"];
                if (objTmpPed.Textos != null)
                {
                    TextoBE objTextoAtencion = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoAtencion")); });
                    if (objTextoAtencion != null) { txtTextoAtencion.Text = objTextoAtencion.Descripcion; }
                    
                    TextoBE objTextoTransporte = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoTransporte")); });
                    if (objTextoTransporte != null) { txtTextoTransporte.Text = objTextoTransporte.Descripcion; }
                    
                    TextoBE objTextoTiempoEntrega = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoTiempoEntrega")); });
                    if (objTextoTiempoEntrega != null) { txtTextoTiempoEntrega.Text = objTextoTiempoEntrega.Descripcion; }
                    
                    //TextoBE objTextoJefeTienda = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoJefeTienda")); });
                    //if (objTextoJefeTienda != null) { txtTextoJefeTienda.Text = objTextoJefeTienda.Descripcion; }
                    
                    TextoBE objTextoObsAdministrativas = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoObsAdministrativas")); });
                    if (objTextoObsAdministrativas != null) { txtTextoObsAdministrativas.Text = objTextoObsAdministrativas.Descripcion; }
                    
                    TextoBE objTextoRefFactura = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoRefFactura")); });
                    if (objTextoRefFactura != null) { txtTextoRefFactura.Text = objTextoRefFactura.Descripcion; }
                    
                    TextoBE objTextoRefDireccion = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoRefDireccion")); });
                    if (objTextoRefDireccion != null) { txtTextoRefDireccion.Text = objTextoRefDireccion.Descripcion; }

                    //INICIO: 08.09.2011 mtejada
                    // solo si es visita o instalación
                    if (ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "DocsTextosVisitas"))
                    {
                            
                        TextoBE objContactoVisita = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoContactoVisita")); });
                        if (txtTextoContactoVisita != null && objContactoVisita != null)
                        {
                            txtTextoContactoVisita.Text = objContactoVisita.Descripcion;
                        }

                        TextoBE objDatosAdicVisita = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoDatosAdicVisita")); });
                        if (txtTextDatosAdicClienteVisita != null && objDatosAdicVisita != null)
                        {
                            txtTextDatosAdicClienteVisita.Text = objDatosAdicVisita.Descripcion;
                        }

                        TextoBE objResultadoVisita = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoResultadoVisita")); });
                        if (txtTextoResultadoVisita != null && cmbTipoDocumento.SelectedValue.Equals("Z036") && objResultadoVisita != null )
                        {
                            tpResultadoVisita.Visible = true;
                            txtTextoResultadoVisita.Text = objResultadoVisita.Descripcion;
                        }
                        else if (cmbTipoDocumento.SelectedValue.Equals("Z037"))
                        {
                            tpResultadoVisita.Visible = false;
                        }

                        TextoBE objTelefonoVisita = objTmpPed.Textos.Find(delegate(TextoBE txts) { 
                            return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoTelefonoVisita")); });
                        if (txtTextTelefonosVisita != null && ( cmbTipoDocumento.SelectedValue.Equals("Z036") || cmbTipoDocumento.SelectedValue.Equals("Z037") ) && objTelefonoVisita != null)
                        {
                            txtTextTelefonosVisita.Text = objTelefonoVisita.Descripcion;
                        }
                        TextoBE objDescripVisita= objTmpPed.Textos.Find(delegate(TextoBE txts) { 
                            return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoDescripVisita")); });
                        if (txtTextDescVisita != null && cmbTipoDocumento.SelectedValue.Equals("Z036") && objDescripVisita != null)
                        {
                            tpDescVisita.Visible = true;
                            tpDescInstala.Visible = false;
                            txtTextDescVisita.Text = objDescripVisita.Descripcion;
                        }
                        TextoBE objDescripInstala= objTmpPed.Textos.Find(delegate(TextoBE txts) { 
                            return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoDescripInstala")); });
                        if (txtTextDescInstala != null && cmbTipoDocumento.SelectedValue.Equals("Z037") && objDescripInstala != null)
                        {
                            tpDescVisita.Visible = false;
                            tpDescInstala.Visible = true;
                            txtTextDescInstala.Text = objDescripInstala.Descripcion;
                        }
                    }
                    else
                    {
                        lnkShowPopUpTextosVisita.Text = "";
                    }
                    //INICIO: 08.09.2011 mtejada
                    
                }
            }
        }

        private void cargaInterlocutoresSession()
        {
            if (Session["Pedido"] != null)
            {
                PedidoBE objTmpPed = (PedidoBE)Session["Pedido"];
                if (objTmpPed.Interlocutores != null)
                {
                    // cargar data
                    //-- solicitante AG
                    InterlocutorBE objSolicitante = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocCliente")); });
                    if (objSolicitante != null)
                    {
                        if (objSolicitante.Cliente != null)
                        {
                            txtCodSolicitante.Text = objSolicitante.Cliente.Codigo;
                            txtNomSolicitante.Text = objSolicitante.Cliente.Descripcion;
                            txtDirSolicitante.Text = objSolicitante.Cliente.Direccion;

                            //correo
                            if (txtCorreo.Text.Equals(""))
                                txtCorreo.Text = objSolicitante.Cliente.Mail;
                            try
                            {
                                ddlCodpSolicitante.SelectedValue = objSolicitante.Cliente.CodigoPostal;
                            }
                            catch { ddlCodpSolicitante.SelectedValue = string.Empty; }
                            txtTelSolicitante.Text = objSolicitante.Cliente.Telefono;
                            txtNifSolicitante.Text = objSolicitante.Cliente.Ruc;
                        }
                    }
                    //-- solicitante WE
                    InterlocutorBE objDestMercaderia = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocDestMerc")); });
                    if (objDestMercaderia != null)
                    {
                        if (objDestMercaderia.Cliente != null)
                        {
                            txtCodDestMerc.Text = objDestMercaderia.Cliente.Codigo;
                            txtNomDestMerc.Text = objDestMercaderia.Cliente.Descripcion;
                            txtDirDestMerc.Text = objDestMercaderia.Cliente.Direccion;
                            try
                            {
                                ddlCodpDestMerc.SelectedValue = objDestMercaderia.Cliente.CodigoPostal;
                            }
                            catch { ddlCodpDestMerc.SelectedValue = string.Empty; }
                            txtTelDestMerc.Text = objDestMercaderia.Cliente.Telefono;
                        }
                    }
                    //-- solicitante RE
                    InterlocutorBE objDestFactura = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocDestFact")); });
                    if (objDestFactura != null)
                    {
                        if (objDestFactura.Cliente != null)
                        {
                            txtCodDestFact.Text = objDestFactura.Cliente.Codigo;
                            txtNomDestFact.Text = objDestFactura.Cliente.Descripcion;
                            txtDirDestFact.Text = objDestFactura.Cliente.Direccion;
                            try
                            {
                                ddlCodpDestFact.SelectedValue = objDestFactura.Cliente.CodigoPostal;
                            }
                            catch { ddlCodpDestFact.SelectedValue = string.Empty; }
                            txtTelDestFact.Text = objDestFactura.Cliente.Telefono;
                        }
                    }
                    //-- solicitante RG
                    InterlocutorBE objResPago = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocResPago")); });
                    if (objResPago != null)
                    {
                        if (objResPago.Cliente != null)
                        {
                            txtCodResPago.Text = objResPago.Cliente.Codigo;
                            txtNomResPago.Text = objResPago.Cliente.Descripcion;
                            txtDirResPago.Text = objResPago.Cliente.Direccion;
                            try
                            {
                                ddlCodpResPago.SelectedValue = objResPago.Cliente.CodigoPostal;
                            }
                            catch { ddlCodpResPago.SelectedValue = string.Empty; }
                            txtTelResPago.Text = objResPago.Cliente.Telefono;
                            txtNifResPago.Text = objResPago.Cliente.Ruc;
                        }
                    }
                    //-- solicitante Z3
                    InterlocutorBE objAgTransporte = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocAgTrans")); });
                    if (objAgTransporte != null)
                    {
                        if (objAgTransporte.Cliente != null)
                        {
                            txtCodAgTrans.Text = objAgTransporte.Cliente.Codigo;
                            txtNomAgTrans.Text = objAgTransporte.Cliente.Descripcion;

                            //rgutierrez 22.11.2011
                            txtDirAgTrans.Text = objAgTransporte.Cliente.Direccion;
                            if (objAgTransporte.Cliente.CodigoPostal != null) { ddlCodpAgTrans.SelectedValue = objAgTransporte.Cliente.CodigoPostal; }
                            txtTelAgTrans.Text = objAgTransporte.Cliente.Telefono;
                            txtNifAgTrans.Text = objAgTransporte.Cliente.Ruc;
                        }
                    }

                    //-- encargado comercial VE
                    InterlocutorBE objEncargadoComercial = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocVendedor1")); });
                    if (objEncargadoComercial != null)
                    {
                        if (objEncargadoComercial.Persona != null)
                        {
                            txtCodVendedor1.Text = objEncargadoComercial.Persona.CodPersona;
                            txtNomVendedor1.Text = objEncargadoComercial.Persona.Descripcion;
                        }
                    }
                    //-- Vendedor Web V2
                    InterlocutorBE objVendedorWeb = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocVendedor2")); });
                    if (objVendedorWeb != null)
                    {
                        if (objVendedorWeb.Persona != null)
                        {
                            txtCodVendedorWeb.Text = objVendedorWeb.Persona.CodPersona;
                            txtNomVendedorWeb.Text = objVendedorWeb.Persona.Descripcion;
                        }
                    }
                    //-- Vendedor2 V3
                    InterlocutorBE objVendedor2 = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocVendedor3")); });
                    if (objVendedor2 != null)
                    { if (objVendedor2.Persona != null) { cmbVendedor2.SelectedValue = objVendedor2.Persona.CodPersona; } }
                    //-- Vendedor3 V4
                    InterlocutorBE objVendedor3 = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocVendedor4")); });
                    if (objVendedor3 != null)
                    { if (objVendedor3.Persona != null) { cmbVendedor3.SelectedValue = objVendedor3.Persona.CodPersona; } }
                    
                    
                    //-- profesional Z2
                    InterlocutorBE objProfesional = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocProfesional")); });
                    if (objProfesional != null)
                    {
                        if (objProfesional.Persona != null)
                        {
                            txtCodProfesional.Text = objProfesional.Persona.CodPersona;
                            txtNomProfesional.Text = objProfesional.Persona.Descripcion;

                            //rgutierrez 22.11.2011
                            txtDirProfesional.Text = objProfesional.Cliente.Direccion;
                            if (objProfesional.Cliente.CodigoPostal != null) { ddlCodpProfesional.SelectedValue = objProfesional.Cliente.CodigoPostal; }
                            txtTelProfesional.Text = objProfesional.Cliente.Telefono;
                            //txtNifProfesional.Text = objProfesional.Cliente.Ruc;
                        }
                    }

                    //rgutierrez 28.12.2011
                    //-- profesional 2 (Z5)
                    InterlocutorBE objProfesional2 = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocProfesional2")); });
                    if (objProfesional2 != null)
                    {
                        if (objProfesional2.Persona != null)
                        {
                            txtCodProfesional2.Text = objProfesional2.Persona.CodPersona;
                            txtNomProfesional2.Text = objProfesional2.Persona.Descripcion;
                            txtDirProfesional2.Text = objProfesional2.Cliente.Direccion;
                            if (objProfesional2.Cliente.CodigoPostal != null) { ddlCodpProfesional2.SelectedValue = objProfesional2.Cliente.CodigoPostal; }
                            txtTelProfesional2.Text = objProfesional2.Cliente.Telefono;
                        }
                    }
                }
            }
        }

        private void guardaInterlocutores()
        {
            List<InterlocutorBE> lstInterlocutores = new List<InterlocutorBE>();

            InterlocutorBE objSolicitante = new InterlocutorBE();
            objSolicitante.Funcion = ParametroBC.Instance.getParamValue("IlocCliente");
            objSolicitante.Cliente.Codigo = txtCodSolicitante.Text;
            objSolicitante.Cliente.Descripcion = txtNomSolicitante.Text;
            objSolicitante.Cliente.Direccion = txtDirSolicitante.Text;
            try
            {
                objSolicitante.Cliente.CodigoPostal = ddlCodpSolicitante.SelectedValue;
            }
            catch 
            {
                objSolicitante.Cliente.CodigoPostal = string.Empty;
            }
            try
            {
                objSolicitante.Cliente.Ciudad = ddlCodpSolicitante.SelectedItem.Text;
            }
            catch 
            {
                objSolicitante.Cliente.Ciudad = string.Empty;
            }            
            objSolicitante.Cliente.Telefono = txtTelSolicitante.Text;
            objSolicitante.Cliente.Ruc = txtNifSolicitante.Text;
            objSolicitante.Cliente.Mail = txtCorreo.Text;
            try
            {
                objSolicitante.Cliente.Distrito = ddlCodpSolicitante.SelectedItem.Text.Trim();
            }
            catch 
            {
                objSolicitante.Cliente.Distrito = string.Empty;
            }
            lstInterlocutores.Add(objSolicitante);

            InterlocutorBE objDestMercaderia = new InterlocutorBE();
            objDestMercaderia.Funcion = ParametroBC.Instance.getParamValue("IlocDestMerc");
            objDestMercaderia.Cliente.Codigo = txtCodDestMerc.Text;
            objDestMercaderia.Cliente.Descripcion = txtNomDestMerc.Text;
            objDestMercaderia.Cliente.Direccion = txtDirDestMerc.Text;
            objDestMercaderia.Cliente.CodigoPostal = ddlCodpDestMerc.SelectedValue;
            objDestMercaderia.Cliente.Ciudad = ddlCodpDestMerc.SelectedItem.Text;
            objDestMercaderia.Cliente.Telefono = txtTelDestMerc.Text;

            lstInterlocutores.Add(objDestMercaderia);

            InterlocutorBE objDestFactura = new InterlocutorBE();
            objDestFactura.Funcion = ParametroBC.Instance.getParamValue("IlocDestFact");
            objDestFactura.Cliente.Codigo = txtCodDestFact.Text;
            objDestFactura.Cliente.Descripcion = txtNomDestFact.Text;
            objDestFactura.Cliente.Direccion = txtDirDestFact.Text;
            objDestFactura.Cliente.CodigoPostal = ddlCodpDestFact.SelectedValue;
            objDestFactura.Cliente.Ciudad = ddlCodpDestFact.SelectedItem.Text;
            objDestFactura.Cliente.Telefono = txtTelDestFact.Text;

            lstInterlocutores.Add(objDestFactura);

            InterlocutorBE objResPago = new InterlocutorBE();
            objResPago.Funcion = ParametroBC.Instance.getParamValue("IlocResPago");
            objResPago.Cliente.Codigo = txtCodResPago.Text;
            objResPago.Cliente.Descripcion = txtNomResPago.Text;
            objResPago.Cliente.Direccion = txtDirResPago.Text;
            objResPago.Cliente.CodigoPostal = ddlCodpResPago.SelectedValue;
            objResPago.Cliente.Ciudad = ddlCodpResPago.SelectedItem.Text;
            objResPago.Cliente.Telefono = txtTelResPago.Text;
            objResPago.Cliente.Ruc = txtNifResPago.Text;

            lstInterlocutores.Add(objResPago);

            InterlocutorBE objAgTransporte = new InterlocutorBE();
            objAgTransporte.Funcion = ParametroBC.Instance.getParamValue("IlocAgTrans");
            objAgTransporte.Cliente.Codigo = txtCodAgTrans.Text == "" ? "" : txtCodAgTrans.Text.PadLeft(10, '0');
            objAgTransporte.Cliente.Descripcion = txtNomAgTrans.Text;

            //rgutierrez 22.11.2011
            objAgTransporte.Cliente.Direccion = txtDirAgTrans.Text;
            objAgTransporte.Cliente.CodigoPostal = ddlCodpAgTrans.SelectedValue;
            objAgTransporte.Cliente.Ciudad = ddlCodpAgTrans.SelectedItem.Text;
            objAgTransporte.Cliente.Telefono = txtTelAgTrans.Text;
            objAgTransporte.Cliente.Ruc = txtNifAgTrans.Text;

            lstInterlocutores.Add(objAgTransporte);
        
            InterlocutorBE objEncargadoComercial = new InterlocutorBE();
            objEncargadoComercial.Funcion = ParametroBC.Instance.getParamValue("IlocVendedor1");
            objEncargadoComercial.Persona.CodPersona = txtCodVendedor1.Text;
            objEncargadoComercial.Persona.Descripcion = txtNomVendedor1.Text;

            lstInterlocutores.Add(objEncargadoComercial);

            InterlocutorBE objVendedorWeb = new InterlocutorBE();
            objVendedorWeb.Funcion = ParametroBC.Instance.getParamValue("IlocVendedor2");
            objVendedorWeb.Persona.CodPersona = txtCodVendedorWeb.Text;
            objVendedorWeb.Persona.Descripcion = txtNomVendedorWeb.Text;

            lstInterlocutores.Add(objVendedorWeb);

            InterlocutorBE objVendedor2 = new InterlocutorBE();
            objVendedor2.Funcion = ParametroBC.Instance.getParamValue("IlocVendedor3");
            objVendedor2.Persona.CodPersona = cmbVendedor2.SelectedValue;

            lstInterlocutores.Add(objVendedor2);

            InterlocutorBE objVendedor3 = new InterlocutorBE();
            objVendedor3.Funcion = ParametroBC.Instance.getParamValue("IlocVendedor4");
            objVendedor3.Persona.CodPersona = cmbVendedor3.SelectedValue;

            lstInterlocutores.Add(objVendedor3);

            InterlocutorBE objProfesional = new InterlocutorBE();
            objProfesional.Funcion = ParametroBC.Instance.getParamValue("IlocProfesional");
            objProfesional.Persona.CodPersona = txtCodProfesional.Text;//cmbProfesional.SelectedValue;
            objProfesional.Persona.Descripcion = txtNomProfesional.Text;

            //rgutierrez 22.11.2011
            objProfesional.Cliente.Direccion = txtDirProfesional.Text;
            objProfesional.Cliente.CodigoPostal = ddlCodpProfesional.SelectedValue;
            objProfesional.Cliente.Ciudad = ddlCodpProfesional.SelectedItem.Text;
            objProfesional.Cliente.Telefono = txtTelProfesional.Text;
            //objProfesional.Cliente.Ruc = txtNifProfesional.Text;

            lstInterlocutores.Add(objProfesional);

            //rgutierrez 28.12.2011
            InterlocutorBE objProfesional2 = new InterlocutorBE();
            objProfesional2.Funcion = ParametroBC.Instance.getParamValue("IlocProfesional2");
            objProfesional2.Persona.CodPersona = txtCodProfesional2.Text;
            objProfesional2.Persona.Descripcion = txtNomProfesional2.Text;
            objProfesional2.Cliente.Direccion = txtDirProfesional2.Text;
            objProfesional2.Cliente.CodigoPostal = ddlCodpProfesional2.SelectedValue;
            objProfesional2.Cliente.Ciudad = ddlCodpProfesional2.SelectedItem.Text;
            objProfesional2.Cliente.Telefono = txtTelProfesional2.Text;
            lstInterlocutores.Add(objProfesional2);

            Session["Interlocutores"] = lstInterlocutores;
            _lvObjPedido = (PedidoBE)Session["Pedido"];
            _lvObjPedido.Interlocutores = lstInterlocutores;
            Session["Pedido"] = _lvObjPedido;
        }

        [System.Web.Services.WebMethod]
        [System.Web.Script.Services.ScriptMethod]
        public static string[] buscaClientes(string prefixText, int count)
        {
            string[] retVal;
            List<ClienteBE> lstClientes = ClienteBC.Instance.buscar(prefixText);
            List<string> lst = new List<string>();
            int total = lstClientes.Count < count ? lstClientes.Count : count;
            for (int i = 0; i < total; i++)
            {
                string item = AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(lstClientes[i].Descripcion, lstClientes[i].Codigo);
                lst.Add(item);
            }
            retVal = lst.ToArray();
            return retVal;
        }

        [System.Web.Services.WebMethod]
        [System.Web.Script.Services.ScriptMethod]
        public static string[] buscaProfesionales(string prefixText, int count)
        {
            string[] retVal;
            List<PersonaBE> lstProfesionales = PersonaBC.Instance.listarProfesionales(prefixText);
            List<string> lst = new List<string>();
            int total = lstProfesionales.Count < count ? lstProfesionales.Count : count;
            for (int i = 0; i < total; i++)
            {
                string item = AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(lstProfesionales[i].Descripcion, lstProfesionales[i].CodPersona);
                lst.Add(item);
            }
            retVal = lst.ToArray();
            return retVal;
        }

        [System.Web.Services.WebMethod]
        [System.Web.Script.Services.ScriptMethod]
        public static string[] buscaMateriales(string prefixText, int count)
        {
            string[] retVal;
            List<MaterialBE> lstMateriales = MaterialBC.Instance.buscarMateriales(prefixText);
            List<string> lst = new List<string>();
            int total = lstMateriales.Count < count ? lstMateriales.Count : count;
            for (int i = 0; i < total; i++)
            {
                string item = AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(lstMateriales[i].DescMaterial, lstMateriales[i].CodMaterialCorto);
                lst.Add(item);
            }
            retVal = lst.ToArray();
            return retVal;
        }

        private List<GenericBE> getGenericBE(ParametroWS.GenericBE[] p)
        {
            List<GenericBE> g = new List<GenericBE>();
            try
            {
                foreach (ParametroWS.GenericBE i in p)
                {
                    GenericBE n = new GenericBE();
                    n.Codigo = i.Codigo;
                    n.Descripcion = i.Descripcion;
                    g.Add(n);
                }
            }
            catch
            {
                g = null;
            }
            return g;
        }

        private void cargaCombos()
        {
            txtTipoCambio.Text = ParametroBC.Instance.getTipoCambio().ToString();
            txtFecha.Text = DateTime.Today.ToString("dd/MM/yyyy");
            txtFechaValidez.Text = DateTime.Today.ToString("dd/MM/yyyy");
            //txtFechaEntrega.Text = DateTime.Today.ToString("dd/MM/yyyy");
            //List<GenericBE> lstOficinas, lstTipoDocumento, lstGrupoVendedores, lstCondicionesPago, lstSectores, lstMotivos, lstGrupoCond, lstBloqueoEntrega, lstBloqueoFactura, lstVendedores;
            List<GenericBE> lstOficinas = new List<GenericBE>();
            List<GenericBE> lstTipoDocumento = new List<GenericBE>();
            List<GenericBE> lstGrupoVendedores = new List<GenericBE>();
            List<GenericBE> lstSectores = new List<GenericBE>();
            List<GenericBE> lstMotivos = new List<GenericBE>();
            List<GenericBE> lstGrupoCond = new List<GenericBE>();
            List<GenericBE> lstBloqueoEntrega = new List<GenericBE>();
            List<GenericBE> lstBloqueoFactura = new List<GenericBE>();
            List<GenericBE> lstVendedores = new List<GenericBE>();
            List<GenericBE> lstCodigoPostal = new List<GenericBE>();
            List<GenericBE> lstTipoVisita = new List<GenericBE>();
            /* 
            ParametroBC.Instance.getDataDDL(ref lstCodigoPostal, ref lstVendedores, ref lstBloqueoEntrega,
                ref lstBloqueoFactura, ref this._lvLstPrioridadEnt, ref lstGrupoCond, ref lstGrupoVendedores,
                ref lstMotivos, ref lstOficinas, ref lstSectores, ref lstTipoDocumento);
            */

            //LLAMADO AL SERVICIO WEB.
            //*******************************************************************************
            //comentado para no usar el servicio e ir a la capa de negocio directo
            //ParametroWS.ParametroWS p = new DECOR.WebApp.ParametroWS.ParametroWS();
            //ParametroWS.DataDDLBE dataDDLBE = p.getDataDDL();
            //*******************************************************************************
            //adicionado para llamar al negocio
            if (Session["CargarCombos"] == null)
            {
                ParametroBC.Instance.getDataDDL(ref lstCodigoPostal, ref lstVendedores,
                ref lstBloqueoEntrega, ref lstBloqueoFactura,
                ref _lvLstPrioridadEnt, ref lstGrupoCond, ref lstGrupoVendedores, ref lstMotivos, ref lstOficinas, ref lstSectores,
                ref lstTipoDocumento, ref lstTipoVisita);

                Dictionary<string, List<GenericBE>> lstCombos = new Dictionary<string, List<GenericBE>>();
                lstCombos.Add("codigoPostal", lstCodigoPostal);
                lstCombos.Add("vendedores", lstVendedores);
                lstCombos.Add("bloqueoEntrega", lstBloqueoEntrega);
                lstCombos.Add("bloqueoFactura", lstBloqueoFactura);
                lstCombos.Add("prioridadEnt", _lvLstPrioridadEnt);
                lstCombos.Add("grupoCond", lstGrupoCond);
                lstCombos.Add("grupoVendedores", lstGrupoVendedores);
                lstCombos.Add("motivos", lstMotivos);
                lstCombos.Add("oficinas", lstOficinas);
                lstCombos.Add("sectores", lstSectores);
                lstCombos.Add("tipoDocumento", lstTipoDocumento);
                lstCombos.Add("tipoVisita", lstTipoVisita);

                Session["CargarCombos"] = lstCombos;
            }
            
            //*******************************************************************************
            //comentado para no usar el servicio e ir a la capa de negocio directo
            //lstCodigoPostal = getGenericBE(dataDDLBE.LstZipCodes);
            //lstVendedores = getGenericBE(dataDDLBE.LstAsesores);
            
            //lstBloqueoEntrega = getGenericBE(dataDDLBE.LstBloEnt);
            //lstBloqueoFactura = getGenericBE(dataDDLBE.LstBloFac);
            //this._lvLstPrioridadEnt = getGenericBE(dataDDLBE.LstCondExp);
            //lstGrupoCond = getGenericBE(dataDDLBE.LstGrpCond);
            //lstGrupoVendedores = getGenericBE(dataDDLBE.LstGrpVend);
            //lstMotivos = getGenericBE(dataDDLBE.LstMotPed);
            //lstOficinas = getGenericBE(dataDDLBE.LstOfVtas);
            //lstSectores = getGenericBE(dataDDLBE.LstSectores);
            //lstTipoDocumento = getGenericBE(dataDDLBE.LstTipoDoc);
            //lstTipoVisita = getGenericBE(dataDDLBE.LstTipoVisita);
            //*******************************************************************************
            //this._lvLstMotivoRechazo
            Dictionary<string, List<GenericBE>> dict = (Dictionary<string, List<GenericBE>>)Session["CargarCombos"];

            //List<GenericBE> lstOficinas = OficinaBC.Instance.listar();
            cmbOficina.DataValueField = "Codigo";
            cmbOficina.DataTextField = "Descripcion";
            cmbOficina.DataSource = dict["oficinas"].ToList();
            cmbOficina.DataBind();

            //List<TipoDocumentoBE> lstTipoDocumento = TipoDocumentoBC.Instance.listar();
            cmbTipoDocumento.DataValueField = "Codigo";
            cmbTipoDocumento.DataTextField = "Descripcion";
            cmbTipoDocumento.DataSource = dict["tipoDocumento"].ToList(); //lstTipoDocumento;
            cmbTipoDocumento.DataBind();
            //-------------------------------

            //List<GrupoVendedoresBE> lstGrupoVendedores = GrupoVendedoresBC.Instance.listar();
            //cmbGrupoVendedores.DataValueField = "Codigo";
            //cmbGrupoVendedores.DataTextField = "Descripcion";
            //cmbGrupoVendedores.DataSource = lstGrupoVendedores;
            //cmbGrupoVendedores.DataBind();
            //try
            //{
            //    if (lstGrupoVendedores.Count > 0) { cmbGrupoVendedores.SelectedValue = "100"; }
            //}
            //catch { }

            GenericBE objVacio = new GenericBE(); objVacio.Codigo = ""; objVacio.Descripcion = "---";
            List<GenericBE> lstCondicionesPago = CondicionPagoBC.Instance.listar();
            lstCondicionesPago.Add(objVacio);
            cmbCondicionesPago.DataValueField = "Codigo";
            cmbCondicionesPago.DataTextField = "Descripcion";
            cmbCondicionesPago.DataSource = lstCondicionesPago;
            cmbCondicionesPago.DataBind();
            cmbCondicionesPago.SelectedValue = "";

            //List<GenericBE> lstSectores = ClienteBC.Instance.listaSectores();
            //cmbSector.DataValueField = "Codigo";
            //cmbSector.DataTextField = "Descripcion";
            //cmbSector.DataSource = lstSectores;
            //cmbSector.DataBind();
            
            //List<GenericBE> lstMotivos = PedidoBC.Instance.listaMotivosPedido();
            //lstMotivos.Add(objVacio);
            cmbMotivo.DataValueField = "Codigo";
            cmbMotivo.DataTextField = "Descripcion";
            cmbMotivo.DataSource = dict["motivos"].ToList(); //lstMotivos;
            cmbMotivo.DataBind();
            cmbMotivo.SelectedValue = "";

            //List<GenericBE> lstGrupoCond = PedidoBC.Instance.listaGrupoCondiciones();
            //lstGrupoCond.Add(objVacio);
            cmbGrupoCond.DataValueField = "Codigo";
            cmbGrupoCond.DataTextField = "Descripcion";
            cmbGrupoCond.DataSource = dict["grupoCond"].ToList(); //lstGrupoCond;
            cmbGrupoCond.DataBind();
            cmbGrupoCond.SelectedValue = "";

            //--- cond exp / prio entr.
            //this._lvLstPrioridadEnt = PedidoBC.Instance.listaCondicionesExp();
            //this._lvLstPrioridadEnt.Add(objVacio);
            //Session["lstCondExp"] = this._lvLstPrioridadEnt;
            //cmbCondExp.DataSource = this._lvLstPrioridadEnt;
            Session["lstCondExp"] = dict["prioridadEnt"].ToList();
            cmbCondExp.DataSource = dict["prioridadEnt"].ToList();
            cmbCondExp.DataValueField = "Codigo";
            cmbCondExp.DataTextField = "Descripcion";
            cmbCondExp.DataBind();
            cmbCondExp.SelectedValue = ParametroBC.Instance.getParamValue("CondExpDefault");
            //--- grupo materiales
            this._lvLstGrupoMat = MaterialBC.Instance.listarGruposMat();
            this._lvLstGrupoMat.Add(objVacio);
            Session["lstGrupoMat"] = this._lvLstGrupoMat;
            //--- motivo rechazo
            this._lvLstMotivoRechazo = PedidoBC.Instance.listarMotivosRechazo();
            this._lvLstMotivoRechazo.Add(objVacio);
            Session["lstMotivoRechazo"] = this._lvLstMotivoRechazo;
            //----------------------
            
            //List<GenericBE> lstBloqueoEntrega = PedidoBC.Instance.listaBloqueoEntrega();
            //lstBloqueoEntrega.Add(objVacio);
            cmbBloqueoEntrega.DataValueField = "Codigo";
            cmbBloqueoEntrega.DataTextField = "Descripcion";
            cmbBloqueoEntrega.DataSource = dict["bloqueoEntrega"].ToList(); //lstBloqueoEntrega;
            cmbBloqueoEntrega.DataBind();
            cmbBloqueoEntrega.SelectedValue = "";

            //List<GenericBE> lstBloqueoFactura = PedidoBC.Instance.listaBloqueoFactura();
            //lstBloqueoFactura.Add(objVacio);
            cmbBloqueoFactura.DataValueField = "Codigo";
            cmbBloqueoFactura.DataTextField = "Descripcion";
            cmbBloqueoFactura.DataSource = dict["bloqueoFactura"].ToList(); //lstBloqueoFactura;
            cmbBloqueoFactura.DataBind();
            cmbBloqueoFactura.SelectedValue = "";

            //PersonaBE objPerVacio = new PersonaBE(); objPerVacio.CodPersona = ""; objPerVacio.Descripcion = "---";
            //List<PersonaBE> lstVendedores = PersonaBC.Instance.listarVendedores();
            //lstVendedores.Add(objPerVacio);
            //cmbVendedor2.DataValueField = "CodPersona";
            cmbVendedor2.DataValueField = "Codigo";
            cmbVendedor2.DataTextField = "Descripcion";
            cmbVendedor2.DataSource = dict["vendedores"].ToList(); //lstVendedores;
            cmbVendedor2.DataBind();
            cmbVendedor2.SelectedValue = "";
            //cmbVendedor3.DataValueField = "CodPersona";
            cmbVendedor3.DataValueField = "Codigo";
            cmbVendedor3.DataTextField = "Descripcion";
            cmbVendedor3.DataSource = dict["vendedores"].ToList(); //lstVendedores;
            cmbVendedor3.DataBind();
            cmbVendedor3.SelectedValue = "";

            /******** moneda ********/
            cmbMoneda.Items.Add("PEN"); cmbMoneda.Items.Add("USD");
            cmbMoneda.SelectedIndex = 0;
            /************************/

            //-----------------------------------------------------------------------
            //List<GenericBE> lstCodigoPostal = ParametroBC.Instance.getListaZipCode();
            ddlCodpSolicitante.DataValueField = "Codigo";
            ddlCodpSolicitante.DataTextField = "Descripcion";
            ddlCodpSolicitante.DataSource = dict["codigoPostal"].ToList(); //lstCodigoPostal;
            ddlCodpSolicitante.DataBind();

            ddlCodpDestMerc.DataValueField = "Codigo";
            ddlCodpDestMerc.DataTextField = "Descripcion";
            ddlCodpDestMerc.DataSource = dict["codigoPostal"].ToList(); //lstCodigoPostal;
            ddlCodpDestMerc.DataBind();

            ddlCodpDestFact.DataValueField = "Codigo";
            ddlCodpDestFact.DataTextField = "Descripcion";
            ddlCodpDestFact.DataSource = dict["codigoPostal"].ToList(); //lstCodigoPostal;
            ddlCodpDestFact.DataBind();

            ddlCodpResPago.DataValueField = "Codigo";
            ddlCodpResPago.DataTextField = "Descripcion";
            ddlCodpResPago.DataSource = dict["codigoPostal"].ToList(); //lstCodigoPostal;
            ddlCodpResPago.DataBind();

            //rgutierrez 22.11.2011
            ddlCodpAgTrans.DataValueField = "Codigo";
            ddlCodpAgTrans.DataTextField = "Descripcion";
            ddlCodpAgTrans.DataSource = dict["codigoPostal"].ToList(); //lstCodigoPostal;
            ddlCodpAgTrans.DataBind();

            //rgutierrez 22.11.2011
            ddlCodpProfesional.DataValueField = "Codigo";
            ddlCodpProfesional.DataTextField = "Descripcion";
            ddlCodpProfesional.DataSource = dict["codigoPostal"].ToList(); //lstCodigoPostal;
            ddlCodpProfesional.DataBind();

            //rgutierrez 28.12.2011
            ddlCodpProfesional2.DataValueField = "Codigo";
            ddlCodpProfesional2.DataTextField = "Descripcion";
            ddlCodpProfesional2.DataSource = dict["codigoPostal"].ToList(); //lstCodigoPostal;
            ddlCodpProfesional2.DataBind();

            cmbTipoVisita.DataValueField = "Codigo";
            cmbTipoVisita.DataTextField = "Descripcion";
            cmbTipoVisita.DataSource = dict["tipoVisita"].ToList(); //lstTipoVisita;
            cmbTipoVisita.DataBind();
        }

        private void cargaMateriales()
        {
            List<DetalleBE> lstMateriales;
            lstMateriales = (Session["MaterialesList"] == null) ? null : (List<DetalleBE>)Session["MaterialesList"];

            if (Session["Pedido"] != null)
            {
                _lvObjPedido = (PedidoBE)Session["Pedido"];
            }
            else
            {
                this.guardaPedido();
            }
            //lstMateriales = new List<DetalleBE>();
            if (lstMateriales != null)
            {
                _lvObjPedido.Detalle = lstMateriales;
            }
            Session["Pedido"] = _lvObjPedido;
        }

        //modificado
        protected void cgvMateriales_RowCreated(object sender, GridViewRowEventArgs e)
        {
            this._lvObjPedido = (PedidoBE)Session["Pedido"];
            this.EnsureTblRepartos();
            //foreach (GridViewRow row in cgvMateriales.Rows)
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                HiddenField hidPosicion = (HiddenField)e.Row.FindControl("hidPosicion");
                string posActual = hidPosicion.Value.PadLeft(6, '0');

                List<DetalleBE> lstDetalle = new List<DetalleBE>();
                if (this._lvObjPedido != null)
                {
                    lstDetalle = this._lvObjPedido.Detalle;
                }
                DetalleBE objItem = lstDetalle.Find(delegate(DetalleBE obj) { return obj.Posicion == posActual; });

                #region generación de repartos
                int repCount = Convert.ToInt16(ParametroBC.Instance.getParamValue("RepartoCount"));
                Panel pnlReparto = (Panel)e.Row.FindControl("pnlReparto");
                HtmlTable tblRepartos = (HtmlTable)pnlReparto.FindControl("tblRepartos");

                TextBox txtFechaEnt, txtCantPed; Label lblCantConf;
                Label lblTipoReparto;
                for (int i = 1; i <= repCount; i++)
                {
                    string varTxtFechaEntrega = "txtFechaEntrega" + i.ToString();
                    string varLblCantConf = "lblCantConf" + i.ToString();
                    string varTxtCantPed = "txtCantPed" + i.ToString();
                    string varLblTipoReparto = "lblTipoReparto" + i.ToString();

                    //this.EnsureTblRepartos();

                    txtFechaEnt = (TextBox)tblRepartos.FindControl(varTxtFechaEntrega);
                    txtCantPed = (TextBox)tblRepartos.FindControl(varTxtCantPed);
                    lblCantConf = (Label)tblRepartos.FindControl(varLblCantConf);
                    lblTipoReparto = (Label)tblRepartos.FindControl(varLblTipoReparto);

                    //--- asignar valor de pedido
                    //if (objItem.Repartos.Count >= i)
                    //{
                    //    txtCantPed.Text = objItem.Repartos[i - 1].CantPed.ToString();
                    //    lblCantConf.Text = objItem.Repartos[i - 1].CantConf.ToString();
                    //    txtFechaEnt.Text = objItem.Repartos[i - 1].FechaEntrega.ToString("dd/MM/yyyy");
                    //}
                }
                #endregion
            }
        }

        protected override void OnPreLoad(EventArgs e)
        {
            this._lvObjPedido = (PedidoBE)Session["Pedido"];
            this.EnsureTblRepartos();
            foreach (GridViewRow row in cgvMateriales.Rows)
            {
                HiddenField hidPosicion = (HiddenField)row.FindControl("hidPosicion");
                string posActual = hidPosicion.Value.PadLeft(6, '0');

                List<DetalleBE> lstDetalle = new List<DetalleBE>();
                if (this._lvObjPedido != null)
                {
                    lstDetalle = this._lvObjPedido.Detalle;
                }
                DetalleBE objItem = lstDetalle.Find(delegate(DetalleBE obj) { return obj.Posicion == posActual; });

                #region generación de repartos
                int repCount = Convert.ToInt16(ParametroBC.Instance.getParamValue("RepartoCount"));
                Panel pnlReparto = (Panel)row.FindControl("pnlReparto");
                HtmlTable tblRepartos = (HtmlTable)pnlReparto.FindControl("tblRepartos");

                TextBox txtFechaEnt, txtCantPed; Label lblCantConf;
                Label lblTipoReparto;
                for (int i = 1; i <= repCount; i++)
                {
                    string varTxtFechaEntrega = "txtFechaEntrega" + i.ToString();
                    string varLblCantConf = "lblCantConf" + i.ToString();
                    string varTxtCantPed = "txtCantPed" + i.ToString();
                    string varTipoReparto = "lblTipoReparto" + i.ToString();

                    //this.EnsureTblRepartos();

                    txtFechaEnt = (TextBox)tblRepartos.FindControl(varTxtFechaEntrega);
                    txtCantPed = (TextBox)tblRepartos.FindControl(varTxtCantPed);
                    lblCantConf = (Label)tblRepartos.FindControl(varLblCantConf);
                    lblTipoReparto = (Label)tblRepartos.FindControl(varTipoReparto);

                    //--- asignar valor de pedido
                    if (objItem != null)
                    {
                        if (objItem.Repartos.Count >= i)
                        {
                            txtCantPed.Text = objItem.Repartos[i - 1].CantPed.ToString("0,0.000");
                            lblCantConf.Text = objItem.Repartos[i - 1].CantConf.ToString("0,0.000");
                            txtFechaEnt.Text = objItem.Repartos[i - 1].FechaEntrega.ToString("dd/MM/yyyy");
                            lblTipoReparto.Text = string.IsNullOrEmpty(objItem.Repartos[i - 1].TipoReparto) ? "" : objItem.Repartos[i - 1].TipoReparto.Trim().ToUpper();

                        }
                        else
                        {
                            txtCantPed.Text = "";
                            lblCantConf.Text = "";
                            txtFechaEnt.Text = "";
                            lblTipoReparto.Text = "";
                        }
                    }
                    
                }
                #endregion

                CargarDescuentos(row, objItem); //rgutierrez 06.12.2011
            }
            base.OnPreLoad(e);
        }
        protected void cgvMateriales_PreRender(object sender, EventArgs e)
        {
            this._lvObjPedido = (PedidoBE)Session["Pedido"];
            this.EnsureTblRepartos();
            foreach (GridViewRow row in cgvMateriales.Rows)
            {
                HiddenField hidPosicion = (HiddenField)row.FindControl("hidPosicion");
                string posActual = hidPosicion.Value.PadLeft(6, '0');

                List<DetalleBE> lstDetalle = new List<DetalleBE>();
                if (this._lvObjPedido != null)
                {
                    lstDetalle = this._lvObjPedido.Detalle;
                }
                DetalleBE objItem = lstDetalle.Find(delegate(DetalleBE obj) { return obj.Posicion == posActual; });
                if (objItem != null){

                    #region generación de repartos
                    int repCount = Convert.ToInt16(ParametroBC.Instance.getParamValue("RepartoCount"));
                    Panel pnlReparto = (Panel)row.FindControl("pnlReparto");
                    HtmlTable tblRepartos = (HtmlTable)pnlReparto.FindControl("tblRepartos");

                    TextBox txtFechaEnt, txtCantPed; 
	                Label lblCantConf,lblTipoReparto;

					for (int i = 1; i <= repCount; i++)
                    {
                        string varTxtFechaEntrega = "txtFechaEntrega" + i.ToString();
                        string varLblCantConf = "lblCantConf" + i.ToString();
                        string varTxtCantPed = "txtCantPed" + i.ToString();
                    	string varTipoReparto = "lblTipoReparto" + i.ToString();

                        txtFechaEnt = (TextBox)tblRepartos.FindControl(varTxtFechaEntrega);
                        txtCantPed = (TextBox)tblRepartos.FindControl(varTxtCantPed);
                        lblCantConf = (Label)tblRepartos.FindControl(varLblCantConf);
                    	lblTipoReparto = (Label)tblRepartos.FindControl(varTipoReparto);

                        //--- asignar valor de pedido
                        if (objItem.Repartos.Count >= i)
                        {
                            txtCantPed.Text = objItem.Repartos[i - 1].CantPed.ToString("0,0.000");
                            lblCantConf.Text = objItem.Repartos[i - 1].CantConf.ToString("0,0.000");
                            
                            txtFechaEnt.Text = objItem.Repartos[i - 1].FechaEntrega.ToString("dd/MM/yyyy");
                        	lblTipoReparto.Text = string.IsNullOrEmpty(objItem.Repartos[i - 1].TipoReparto) ? "" : objItem.Repartos[i - 1].TipoReparto.Trim().ToUpper();
						}
                        else
                        {
                            txtCantPed.Text = "";
                            lblCantConf.Text = "";
                            txtFechaEnt.Text = "";
                        	lblTipoReparto.Text ="";
                        }
                    }
                    #endregion

                    CargarDescuentos(row, objItem); //rgutierrez 06.12.2011
                }

            }
        }
        //------------------------------
        private void EnsureTblRepartos()
        {
            foreach (GridViewRow row in cgvMateriales.Rows)
            {
                if (row.RowType == DataControlRowType.DataRow)
                {
                    if (GetTblRepartos(row) == null)
                    {
                        CreateTblRepartos(row);
                    }
                    CreateTblDescuentos(row); //rgutierrez 05.12.2011
                }
            }
        }
        private HtmlTable GetTblRepartos(GridViewRow row)
        {
            int repCount = Convert.ToInt16(ParametroBC.Instance.getParamValue("RepartoCount"));
            Panel pnlReparto = (Panel)row.FindControl("pnlReparto");
            HtmlTable tblRepartos = (HtmlTable)pnlReparto.FindControl("tblRepartos");

            if (tblRepartos.Rows.Count > 1) { return tblRepartos; }
            return null;
        }
        //modificado
        private void CreateTblRepartos(GridViewRow row)
        {
            int repCount = Convert.ToInt16(ParametroBC.Instance.getParamValue("RepartoCount"));
            Panel pnlReparto = (Panel)row.FindControl("pnlReparto");
            HtmlTable tblRepartos = (HtmlTable)pnlReparto.FindControl("tblRepartos");

            TextBox txtFechaEnt, txtCantPed; Label lblCantConf;
            CalendarExtender ce1; FilteredTextBoxExtender fte;
            Label lblTipoReparto;

            HtmlTableRow htmlTrow;
            HtmlTableCell htmlTcell0, htmlTcell1, htmlTcell2, htmlTcell3, htmlTcell4;

            for (int i = 1; i <= repCount; i++)
            {
                string varTxtFechaEntrega = "txtFechaEntrega" + i.ToString();
                string varLblCantConf = "lblCantConf" + i.ToString();
                string varTxtCantPed = "txtCantPed" + i.ToString();
                string varFteCantPed = "fteCantPed" + i.ToString();
                string varCeFechaEntrega = "ceFechaEntrega" + i.ToString();
                string varLblTipoReparto = "lblTipoReparto" + i.ToString();

                htmlTrow = new HtmlTableRow();
                htmlTcell0 = new HtmlTableCell("td"); htmlTcell0.Align = "center"; htmlTcell0.InnerText = i.ToString();
                htmlTcell1 = new HtmlTableCell("td"); htmlTcell1.Align = "center";
                htmlTcell2 = new HtmlTableCell("td"); htmlTcell2.Align = "center";
                htmlTcell3 = new HtmlTableCell("td"); htmlTcell3.Align = "center"; htmlTcell3.VAlign = "middle";
                htmlTcell4 = new HtmlTableCell("td"); htmlTcell4.Align = "right";

                lblCantConf = new Label();
                lblCantConf.ID = varLblCantConf;

                txtCantPed = new TextBox();
                txtCantPed.ID = varTxtCantPed;
                txtCantPed.CssClass = "inputbox-number";
                txtCantPed.Width = 50;

                fte = new FilteredTextBoxExtender();
                fte.ID = varFteCantPed;
                fte.FilterType = FilterTypes.Custom;
                //fte.FilterType = FilterTypes.Numbers;
                fte.ValidChars = "0123456789,.";
                fte.TargetControlID = varTxtCantPed;

                txtFechaEnt = new TextBox();
                txtFechaEnt.ID = varTxtFechaEntrega;
                txtFechaEnt.CssClass = "inputbox";
                txtFechaEnt.Width = 70;

                lblTipoReparto = new Label();
                lblTipoReparto.ID = varLblTipoReparto;
                lblTipoReparto.Width = 50;

                ce1 = new CalendarExtender();
                ce1.ID = varCeFechaEntrega; ce1.CssClass = "MyCalendar";
                ce1.OnClientShown = "calendarShown";
                ce1.Format = "dd/MM/yyyy";
                ce1.PopupPosition = CalendarPosition.BottomLeft;
                ce1.TargetControlID = varTxtFechaEntrega;

                if (i >= 4) { ce1.PopupPosition = CalendarPosition.TopLeft; }

                htmlTcell1.Controls.Add(txtFechaEnt);
                htmlTcell1.Controls.Add(ce1);
                htmlTcell2.Controls.Add(txtCantPed);
                htmlTcell3.Controls.Add(lblCantConf);
                htmlTcell4.Controls.Add(lblTipoReparto);

                htmlTrow.Cells.Add(htmlTcell0);
                htmlTrow.Cells.Add(htmlTcell1);
                htmlTrow.Cells.Add(htmlTcell2);
                htmlTrow.Cells.Add(htmlTcell3);
                htmlTrow.Cells.Add(htmlTcell4);

                tblRepartos.Rows.Add(htmlTrow);
            }
        }
        //------------------------------

        //rgutierrez 05.12.2011
        private void CreateTblDescuentos(GridViewRow row)
        {
            Panel pnlDctoTotal = (Panel)row.FindControl("pnlDctoTotal");
            HtmlTable tblDescuentos = (HtmlTable)pnlDctoTotal.FindControl("tblDescuentos");

            if (tblDescuentos.Rows.Count > 0) { return; }

            HiddenField hidClaseCondicion;
            TextBox txtImporte;
            FilteredTextBoxExtender fte;
            Label lblValor;
            HtmlTableRow htmlTrow;
            HtmlTableCell htmlTcell0, htmlTcell1, htmlTcell2, htmlTcell3;
            LinkButton lnkCodMaterial = (LinkButton)row.FindControl("lnkCodMaterial");
            DropDownList cmbLote = (DropDownList)row.FindControl("cmbLote");

            PedidoBE objPedido = new PedidoBE();
            objPedido.CodTipoDoc = cmbTipoDocumento.SelectedValue;
            objPedido.CodCliente = txtCodCliente.Text;
            objPedido.Sector = "00";
            objPedido.OrgVentas = cmbOrgVtas.SelectedValue;
            objPedido.CanalDist = cmbCanalDist.SelectedValue;
            objPedido.Fecha = Convert.ToDateTime(txtFecha.Text);
            objPedido.CondPago = cmbCondicionesPago.SelectedValue;
            objPedido.GrupoCond = cmbGrupoCond.SelectedValue;
            DetalleBE objDetalle = new DetalleBE();
            objDetalle.CodMaterial = lnkCodMaterial.Text;
            objDetalle.CodLote = cmbLote.SelectedValue;

            string varHidClaseCondicion;
            string varTxtImporte;
            string varLblValor;

            string retVal;
            objPedido.CodOficina = cmbOficina.SelectedValue;
            List<CondicionBE> lstDctos = CondicionBC.Instance.ObtenerCondiciones(objPedido, objDetalle, out retVal);
            //recuperamos el descuento ZD12 y capturamos el valor de su limite @@@
            try
            {
                lblDsctoAdicional.Text = lstDctos.Find(x => x.ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctosAdicional")).LimiteInferior.ToString() + " %";
                hfDsctoAdi.Value = lstDctos.Find(x => x.ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctosAdicional")).LimiteInferior.ToString();
            }catch {}

            for (int i = 0; i < lstDctos.Count; i++)
            {
                varHidClaseCondicion = "hidClaseCondicion" + i.ToString();
                varTxtImporte = "txtImporte" + i.ToString();
                varLblValor = "lblValor" + i.ToString();

                htmlTrow = new HtmlTableRow();
                htmlTcell0 = new HtmlTableCell("td");
                htmlTcell1 = new HtmlTableCell("td");
                htmlTcell2 = new HtmlTableCell("td");
                htmlTcell3 = new HtmlTableCell("td");

                htmlTcell0.InnerText = lstDctos[i].ClaseCondicion + " - " + lstDctos[i].Denominacion;

                hidClaseCondicion = new HiddenField();
                hidClaseCondicion.ID = varHidClaseCondicion;
                hidClaseCondicion.Value = lstDctos[i].ClaseCondicion;
                htmlTcell0.Controls.Add(hidClaseCondicion);

                txtImporte = new TextBox();
                txtImporte.ID = varTxtImporte;
                txtImporte.CssClass = "inputbox-number";
                txtImporte.Width = 50;
                txtImporte.Text = "0.00";

                if (lstDctos[i].Tratamiento == "A" || lstDctos[i].Tratamiento == "C")
                {
                    txtImporte.Enabled = true;
                }
                else if (lstDctos[i].Tratamiento == "D")
                {
                    txtImporte.Enabled = false;
                }
                //rhuapaya 22.06.2012 si es la ZD12 deshabilitamos el texto importe @@@
                if (lstDctos[i].ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctosAdicional"))
                {
                    txtImporte.Enabled = false;
                }


                fte = new FilteredTextBoxExtender();
                fte.ID = "fteImporte" + i.ToString();
                fte.FilterType = FilterTypes.Custom;
                fte.ValidChars = "0123456789,.";
                fte.TargetControlID = varTxtImporte;

                htmlTcell1.Controls.Add(txtImporte);

                lblValor = new Label();
                lblValor.ID = varLblValor;
                lblValor.Text = "0.00";
                htmlTcell2.Controls.Add(lblValor);

                htmlTcell3.InnerText = lstDctos[i].LimiteInferior.ToString();

                htmlTcell0.Width = "50%";
                htmlTcell1.Width = "20%"; htmlTcell1.Attributes.Add("class", "importe");
                htmlTcell2.Width = "15%"; htmlTcell2.Attributes.Add("class", "valor");
                htmlTcell3.Width = "15%"; htmlTcell3.Attributes.Add("class", "valor");

                htmlTrow.Cells.Add(htmlTcell0);
                htmlTrow.Cells.Add(htmlTcell1);
                htmlTrow.Cells.Add(htmlTcell2);
                htmlTrow.Cells.Add(htmlTcell3);

                tblDescuentos.Rows.Add(htmlTrow);
            }
        }
        
        protected void gvMatAdic_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            this._lvObjPedido = (PedidoBE)Session["Pedido"];
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                //-- seleccionar los valores q se tienen en sesion
                HiddenField hidPosicion = (HiddenField)e.Row.FindControl("hidPosicion");

            }
        }

        protected void cgvMateriales_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            this._lvObjPedido = (PedidoBE)Session["Pedido"];

            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                //-- seleccionar los valores q se tienen en sesion
                HiddenField hidPosicion = (HiddenField)e.Row.FindControl("hidPosicion");
                string posActual = hidPosicion.Value.PadLeft(6, '0');

                List<DetalleBE> lstDetalle = new List<DetalleBE>();
                if (this._lvObjPedido != null)
                {
                    lstDetalle = this._lvObjPedido.Detalle;
                }
                DetalleBE objItem = lstDetalle.Find(delegate(DetalleBE obj) { return obj.Posicion == posActual; });
                
                ////------------------------------------------------
                if (!string.IsNullOrEmpty(objItem.TipoPosAnt) && (!Session["Operacion"].ToString().Equals("copiar")))//&& (objItem.Material.TipoMaterial.Equals("NA3")
                    
                    if (!objItem.TipoPosAnt.ToUpper().Equals(objItem.TipoPosicion.ToUpper().Trim()))
                    {
                        objItem.Repartos.Clear();
                        objItem.TipoPosAnt = objItem.TipoPosicion.ToUpper().Trim();
                    }
                //---------------------------------------------------
                //------------------------------------------------
                //--- pintar de otro color los componentes del kit/combo
                if (!string.IsNullOrEmpty(objItem.PosSup) && objItem.PosSup != "000000")
                {
                    e.Row.BackColor = System.Drawing.Color.Beige;
                }
                //--- resaltar los mat con ped de serv.
                if (objItem.Material.TieneServ)
                {
                    e.Row.Cells[0].BackColor = System.Drawing.Color.Olive;
                    e.Row.Cells[0].ToolTip = ParametroBC.Instance.getParamValue("msgMatConServ");
                }
                //------------------------------------------------
                TextBox txtCantidad = (TextBox)e.Row.FindControl("txtCantidad");
                //------------------------------------------------
                if (ParametroBC.Instance.esTipoX(this._lvObjPedido.CodTipoDoc, "CodNCZP01"))
                {
                    TextBox txtDiferencia = (TextBox)e.Row.FindControl("txtDiferencia");
                    txtDiferencia.ReadOnly = false;

                    //rgutierrez 06.12.2011
                    //TextBox txtDctoDecorPorc = (TextBox)e.Row.FindControl("txtDctoDecorPorc");
                    //txtDctoDecorPorc.ReadOnly = true;
                    //TextBox txtDctoAdicionalPorc = (TextBox)e.Row.FindControl("txtDctoAdicionalPorc");
                    //txtDctoAdicionalPorc.ReadOnly = true;
                    //TextBox txtDctoEstadisticoPorc = (TextBox)e.Row.FindControl("txtDctoEstadisticoPorc");
                    //txtDctoEstadisticoPorc.ReadOnly = true;
                    //TextBox txtDctoGerenciaPorc = (TextBox)e.Row.FindControl("txtDctoGerenciaPorc");
                    //txtDctoGerenciaPorc.ReadOnly = true;
                    //TextBox txtDctoGerenciaMonto = (TextBox)e.Row.FindControl("txtDctoGerenciaMonto");
                    //txtDctoGerenciaMonto.ReadOnly = true;
                }
                if (ParametroBC.Instance.esTipoX(this._lvObjPedido.CodTipoDoc, "CodPedServ"))
                {
                    //--- solo habilitarlo si el material tiene GROES = 'E'
                    if (objItem.Material != null)
                    {
                        if (objItem.Material.EspecialServ || ParametroBC.Instance.esTipoX(this._lvObjPedido.CodTipoDoc, "CodPedProy"))
                        {
                            TextBox txtPreZP08 = (TextBox)e.Row.FindControl("txtPreZP08");
                            txtPreZP08.ReadOnly = false;
                        }

                        //rgutierrez 06.12.2011
                        //if (objItem.Material.EsFlete)
                        //{
                        //    TextBox txtDctoZD06 = (TextBox)e.Row.FindControl("txtDctoZD06");
                        //    txtDctoZD06.ReadOnly = false;
                        //}
                    }

                    //rgutierrez 06.12.2011
                    //TextBox txtDctoDecorPorc = (TextBox)e.Row.FindControl("txtDctoDecorPorc");
                    //txtDctoDecorPorc.ReadOnly = true;
                    //TextBox txtDctoAdicionalPorc = (TextBox)e.Row.FindControl("txtDctoAdicionalPorc");
                    //txtDctoAdicionalPorc.ReadOnly = true;
                    //TextBox txtDctoEstadisticoPorc = (TextBox)e.Row.FindControl("txtDctoEstadisticoPorc");
                    //txtDctoEstadisticoPorc.ReadOnly = true;
                    //TextBox txtDctoGerenciaPorc = (TextBox)e.Row.FindControl("txtDctoGerenciaPorc");
                    //txtDctoGerenciaPorc.ReadOnly = true;
                    //TextBox txtDctoGerenciaMonto = (TextBox)e.Row.FindControl("txtDctoGerenciaMonto");
                    //txtDctoGerenciaMonto.ReadOnly = true;
                }


                if (ParametroBC.Instance.esTipoPosCombo(objItem.TipoPosicion))
                {
                    CheckBox chkBorrar = (CheckBox)e.Row.FindControl("chkBorrar");
                    chkBorrar.Visible = false;
                    txtCantidad.Enabled = false;
                }
                //else
                {

                    //--- prioridad de entrega
                    DropDownList cmbPrioridadEnt = (DropDownList)e.Row.FindControl("cmbPrioridadEnt");
                    if (cmbPrioridadEnt != null)
                    {
                        this._lvLstPrioridadEnt = (List<GenericBE>)Session["lstCondExp"];
                        if (this._lvLstPrioridadEnt == null || _lvLstPrioridadEnt.Count == 0)
                        {
                            this._lvLstPrioridadEnt = PedidoBC.Instance.listaCondicionesExp();
                            Session["lstCondExp"] = this._lvLstPrioridadEnt;

                        }
                        cmbPrioridadEnt.DataSource = this._lvLstPrioridadEnt;
                        cmbPrioridadEnt.DataTextField = "Descripcion";
                        cmbPrioridadEnt.DataValueField = "Codigo";
                        cmbPrioridadEnt.DataBind();
                        cmbPrioridadEnt.SelectedValue = "";

                        if (objItem.PrioridadEntrega != null)
                        {
                            cmbPrioridadEnt.SelectedValue = objItem.PrioridadEntrega;
                        }
                    }
                    //--- grupo material
                    DropDownList cmbGrupoMat = (DropDownList)e.Row.FindControl("cmbGrupoMat");
                    if (cmbGrupoMat != null)
                    {
                        this._lvLstGrupoMat = (List<GenericBE>)Session["lstGrupoMat"];
                        if (this._lvLstGrupoMat == null)
                        {
                            this._lvLstGrupoMat = MaterialBC.Instance.listarGruposMat();
                            Session["lstGrupoMat"] = this._lvLstGrupoMat;
                        }
                        cmbGrupoMat.DataSource = this._lvLstGrupoMat;
                        cmbGrupoMat.DataTextField = "Descripcion";
                        cmbGrupoMat.DataValueField = "Codigo";
                        cmbGrupoMat.DataBind();
                        cmbGrupoMat.SelectedValue = "";

                        if (objItem.CodGrupoMat != null)
                        {
                            cmbGrupoMat.SelectedValue = objItem.CodGrupoMat;
                        }
                    }

                    //--- Motivos de Rechazo
                    DropDownList cmbMotivoRechazo = (DropDownList)e.Row.FindControl("cmbMotivoRechazo");
                    if (cmbMotivoRechazo != null)
                    {
                        this._lvLstMotivoRechazo = (List<GenericBE>)Session["lstMotivoRechazo"];
                        if (this._lvLstMotivoRechazo == null)
                        {
                            //this._lvLstMotivoRechazo = PedidoBC.Instance.listarMotivosRechazo();
                            this._lvLstMotivoRechazo = new List<GenericBE>();
                            Session["lstMotivoRechazo"] = this._lvLstMotivoRechazo;
                        }
                        cmbMotivoRechazo.DataSource = this._lvLstMotivoRechazo;
                        cmbMotivoRechazo.DataTextField = "Descripcion";
                        cmbMotivoRechazo.DataValueField = "Codigo";
                        cmbMotivoRechazo.DataBind();
                        cmbMotivoRechazo.SelectedValue = "";

                        if (objItem.MotivoRechazo != null)
                        {
                            cmbMotivoRechazo.SelectedValue = objItem.MotivoRechazo;
                        }
                    }
                    //-----------------------------------------------------------------------------
                    //-----------------------------------------------------------------------------
                    //-----------------------------------------------------------------------------
                    //-----------------------------------------------------------------------------

                    //-- Mejoras Web v2...
                    //DropDownList cmbCentro = (DropDownList)e.Row.FindControl("cmbCentro");
                    //DropDownList cmbAlmacen = (DropDownList)e.Row.FindControl("cmbAlmacen");
                    //DropDownList cmbLote = (DropDownList)e.Row.FindControl("cmbLote");

                    string op = Session["Operacion"].ToString();
                    string numPedidoModif = string.Empty;
                    string numPosModif = string.Empty;
                    if (op.ToLower().Equals("editar") || op.ToLower().Equals("ver"))
                    {
                        numPedidoModif = this._lvObjPedido.NumPedido;
                        numPosModif = objItem.Posicion;
                    }
                    //--------------------------
                    this._lvLstCentros = new List<GenericBE>();
                    this._lvLstAlmacenes = new List<GenericBE>();
                    this._lvLstLotes = new List<GenericBE>();

                    //ParametroBC.Instance.getDataLotes(objItem.Material.CodMaterial, objItem.Cantidad, objItem.CodCentro,
                    //        objItem.CodAlmacen, objItem.CodLote, numPedidoModif, numPosModif, this._lvObjPedido.OrgVentas,
                    //        this._lvObjPedido.CanalDist, ref this._lvLstCentros, ref this._lvLstAlmacenes, ref this._lvLstLotes);
                    
                    //-- Cambio 08.04.2011
                    //-- Cambio 21.04.2011 mtejada: se agregó la comparación de centro almacen y lote
                    // Sumar cantidades de las posiciones anteriores que tengan el mismo material

                    decimal pCantTot = lstDetalle.Where(X => (Int16.Parse(X.Posicion) < Int16.Parse(objItem.Posicion)) 
                                                                            && (X.CodMaterial == objItem.CodMaterial) 
                                                                            && (X.CodAlmacen == objItem.CodAlmacen)
                                                                            && (X.CodCentro == objItem.CodCentro)
                                                                            && (X.CodLote == objItem.CodLote)).Sum(Y => Y.Cantidad);
                    pCantTot += objItem.Cantidad;
                    this._lvLstCAL = ParametroBC.Instance.getDataLotes(objItem.Material.CodMaterial, pCantTot, string.Empty,
                            string.Empty, string.Empty, numPedidoModif, numPosModif, this._lvObjPedido.OrgVentas, this._lvObjPedido.CanalDist);
                    _lvCALSessKey = _lvPreCALSessKey + objItem.PosicionCorto;
                    Session[_lvCALSessKey] = this._lvLstCAL;//Lista de CAL en Sesión (x pos)

                    //-- distribuir en lstCentro, lstAlmacen, lstLotes
                    this.DistribuirCAL(objItem.CodCentro, objItem.CodAlmacen, this._lvLstCAL, ref this._lvLstCentros, ref this._lvLstAlmacenes, ref this._lvLstLotes);
                    //-- Fin Cambio 08.04.2011

                    //HiddenField hidCodMaterial = (HiddenField)e.Row.FindControl("hidMaterialId");
                    DropDownList cmbCentro = (DropDownList)e.Row.FindControl("cmbCentro");
                    if (cmbCentro != null)
                    {
                        //buscar centro según material y org de ventas
                        //this._lvLstCentros = CentroBC.Instance.listar(objItem.Material, cmbOrgVtas.SelectedValue);
                        //mtejada: 06.03.2013 :EF 227
                        GenericBE objGen = new GenericBE();
                        if (cmbTipoDocumento.SelectedValue == "Z034")
                        {
                            _lvLstCentros.Clear();
                            objGen.Codigo = "9110";
                            objGen.Descripcion = "9110: Distribución";
                            _lvLstCentros.Add(objGen);
                        }
                        //
                        cmbCentro.DataSource = this._lvLstCentros;
                        cmbCentro.DataTextField = "Descripcion";
                        cmbCentro.DataValueField = "Codigo";
                        cmbCentro.DataBind();
                        try
                        {
                            if (this._lvLstCentros.Count > 0)
                            {
                                if (cmbOrgVtas.SelectedValue == "1000") { cmbCentro.SelectedValue = "9110"; }
                                else if (cmbOrgVtas.SelectedValue == "2000") { cmbCentro.SelectedValue = "2010"; }

                                if (cmbOficina.SelectedValue == "1060") { cmbCentro.SelectedValue = "1060"; }
                            }
                        }
                        catch { }

                        //si ya había un centro seleccionado, lo mantiene seleccionado
                        try
                        {
                            if (objItem != null && objItem.CodCentro != null)
                            {
                                cmbCentro.SelectedValue = objItem.CodCentro;
                            }
                            else 
                            {
                                //-- distribuir en lstCentro, lstAlmacen, lstLotes
                                this.DistribuirCAL(cmbCentro.SelectedValue, string.Empty, this._lvLstCAL, ref this._lvLstCentros, ref this._lvLstAlmacenes, ref this._lvLstLotes);
                                //-- Fin Cambio 08.04.2011
                            }
                        }
                        catch { }

                        //------------------------------------
                        //--- cmbCentro_SelectedIndexChanged
                        DropDownList cmbAlmacen = (DropDownList)e.Row.FindControl("cmbAlmacen");
                        if (cmbAlmacen != null)
                        {
                            //se asigna el valor seleccionado del centro:
                            objItem.CodCentro = cmbCentro.SelectedValue;

                            //buscar almacenes según el material y centro seleccionado
                            //this._lvLstAlmacenes = AlmacenBC.Instance.listar(objItem.Material, objItem.CodCentro);
                            cmbAlmacen.DataSource = this._lvLstAlmacenes;
                            cmbAlmacen.DataTextField = "Descripcion";
                            cmbAlmacen.DataValueField = "Codigo";
                            cmbAlmacen.DataBind();
                            try
                            {
                                if (this._lvLstAlmacenes.Count > 0) { cmbAlmacen.SelectedValue = "0001"; }
                            }
                            catch { }
                            //si había un almacen seleccionado, se mantiene seleccionado
                            try
                            {
                                if (objItem != null && objItem.CodAlmacen != null)
                                {
                                    cmbAlmacen.SelectedValue = objItem.CodAlmacen;
                                }
                                else
                                {
                                    //-- distribuir en lstCentro, lstAlmacen, lstLotes
                                    this.DistribuirCAL(cmbCentro.SelectedValue, cmbAlmacen.SelectedValue, this._lvLstCAL, ref this._lvLstCentros, ref this._lvLstAlmacenes, ref this._lvLstLotes);
                                    //-- Fin Cambio 08.04.2011
                                }
                            }
                            catch { }
                            //-------------------------------------

                            //--- cmbAlmacen_SelectedIndexChanged
                            DropDownList cmbLote = (DropDownList)e.Row.FindControl("cmbLote");
                            if (cmbLote != null)
                            {
                                //--- TextBox txtCantidad = (TextBox)e.Row.FindControl("txtCantidad");
                                decimal dCantidad = 0m;
                                try { dCantidad = Convert.ToDecimal(txtCantidad.Text); }
                                catch { }
                                string pCodLoteOptimo = "";

                                //--- si no es tipo de doc sin lote, no trae la lista de lotes disponibles
                                //this._lvLstLotes = new List<GenericBE>();
                                if (!ParametroBC.Instance.esTipoSinLote(this._lvObjPedido.CodTipoDoc))
                                {
                                    objItem.CodAlmacen = cmbAlmacen.SelectedValue;
                                    objItem.Cantidad = dCantidad;

                                    //-- comentado 08.04.2011 @ttapia
                                    //if (this._lvObjPedido != null)
                                    //{
                                    //    this._lvLstLotes = StockBC.Instance.listarLotes(objItem.Material.CodMaterial, objItem.CodCentro, objItem.CodAlmacen, objItem.Cantidad, this._lvObjPedido.NumPedido, out pCodLoteOptimo);
                                    //}
                                    //else
                                    //{
                                    //    this._lvLstLotes = StockBC.Instance.listarLotes(objItem.Material.CodMaterial, objItem.CodCentro, objItem.CodAlmacen, objItem.Cantidad, "", out pCodLoteOptimo);
                                    //}
                                    //-- Materiales que se pueden vender SIN lote
                                    if (this._lvLstLotes.Count == 0)
                                    {
                                        // Si es vta con stock : IM ó NA1, se pinta de rojo
                                        if (ParametroBC.Instance.esTipoX(objItem.Material.TipoMaterial, "VtaConStock"))
                                        {
                                            e.Row.Cells[0].BackColor = System.Drawing.Color.LightPink;
                                        }
                                        else// si no es vta con stock : NA2 ó NA3, se pinta de amarillo
                                        {
                                            e.Row.Cells[0].BackColor = System.Drawing.Color.LightYellow;
                                        }
                                        e.Row.Cells[0].ToolTip = ParametroBC.Instance.getParamValue("msgMatSinStock");
                                    }
                                }

                                GenericBE objVacio = new GenericBE(); objVacio.Codigo = ""; objVacio.Descripcion = "- ninguno -";
                                this._lvLstLotes.Add(objVacio);
                                cmbLote.DataSource = this._lvLstLotes;
                                cmbLote.DataTextField = "Descripcion";
                                cmbLote.DataValueField = "Codigo";
                                cmbLote.DataBind();
                                cmbLote.SelectedValue = "";

                                //selecciono lote óptimo
                                // comentado 08.04.2011 @ttapia
                                try
                                {
                                    if (!ParametroBC.Instance.esTipoOferta(this._lvObjPedido.CodTipoDoc))
                                    {
                                        cmbLote.SelectedIndex = 0;//lote óptimo siempre en primera posición
                                        //if (pCodLoteOptimo != "")
                                        //{
                                        //    cmbLote.SelectedValue = pCodLoteOptimo;
                                        //}
                                    }
                                }
                                catch { }

                                //selecciono lote que venía seleccionado
                                try
                                {
                                    if (objItem != null && !string.IsNullOrEmpty(objItem.CodLote))
                                    {
                                        cmbLote.SelectedValue = objItem.CodLote;
                                    }
                                    else
                                    {
                                        objItem.CodLote = cmbLote.SelectedValue;
                                    }
                                }
                                catch { }
                            }

                            //-------------------------------------
                        }
                    }
                }

                // bloqueo cuando el pedido ya está facturado
                if (Session["PedidoTratado"] != null)
                    if (((bool)Session["PedidoTratado"]))
                    {

                        ((CheckBox)e.Row.FindControl("chkBorrar")).Enabled = false;
                        ((TextBox)e.Row.FindControl("txtCantidad")).Enabled = false;
                        // ((DropDownList)cgvMateriales.Rows[i].FindControl("cmbCentro")).Enabled = false;
                        //((DropDownList)e.Row.FindControl("cmbAlmacen")).Enabled = false;
                        // ((DropDownList)cgvMateriales.Rows[i].FindControl("cmbLote")).Enabled = false;

                        ((LinkButton)e.Row.FindControl("lnkDctoTotal")).Enabled = false;

                        ((DropDownList)e.Row.FindControl("cmbGrupoMat")).Enabled = false;
                        // ((DropDownList)cgvMateriales.Rows[i].FindControl("cmbMotivoRechazo")).Enabled = false;
                        ((TextBox)e.Row.FindControl("lblDescMaterial")).Enabled = false;
                        
                    }

                //fin del bloqueo

                //--- salida de validación tipo posición...
                //-- Cambiar TipoPosición según tipo de material NA1, NA2, NA3 :: Requerimiento 06.04.2011
                //Falta añadir condición para que haga esta validación
                if (ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "docValiZ"))
                {
                    TextBox lblTipoPosicion = (TextBox)e.Row.FindControl("lblTipoPosicion");
                    if (objItem != null)
                    {
                        if (objItem.Material == null)
                        {
                            objItem.Material = MaterialBC.Instance.leerMaterial(objItem.CodMaterial, this._lvObjPedido.OrgVentas, this._lvObjPedido.CanalDist);
                        }
                        
                        //if (objItem.CambAlmacen)
                        //    objItem.Repartos.Clear();

                        //rgutierrez 16.12.2011
                        if (!ParametroBC.Instance.esTipoX(objItem.TipoPosicion, "TipoCabCombo") && !ParametroBC.Instance.esTipoX(objItem.TipoPosicion, "TipoPosCombo"))
                        {
                            if (cmbOrgVtas.SelectedValue == "1000" && (cmbTipoDocumento.SelectedValue == "Z001" || cmbTipoDocumento.SelectedValue == "Z003")) //nueva logica solo para DECOR CENTER y estas 2 clases de documento
                            {
                                if (objItem.Material.TipoMaterial == "NA2" || objItem.Material.TipoMaterial == "NA3")
                                {
                                    //comentado a peticion de tomás (llamó roberto) 26.07.2012 @@@@
                                    //if (_lvLstLotes.Count > 1)
                                    //{
                                    //    objItem.TipoPosicion = "Z010";
                                    //}
                                    //else
                                    //{
                                    //    objItem.TipoPosicion = "ZE10";
                                    //}
                                }
                                else if (objItem.Material.TipoMaterial == "NA" || objItem.Material.TipoMaterial == "NA1" || objItem.Material.TipoMaterial == "IM" || objItem.Material.TipoMaterial == "IM1")
                                {
                                    //objItem.TipoPosicion = "Z010";
                                }
                            }
                            else
                            {
                                //-- Si es NA2
                                if (ParametroBC.Instance.esTipoX(objItem.Material.TipoMaterial, "NA2"))
                                {
                                    //comentado a peticion de tomás (llamó roberto) 26.07.2012 @@@@
                                    //if (this._lvLstLotes.Count <= 1) // Si solo hay un lote, no hay stock (es el item que dice "ninguno")
                                    //{
                                    //    objItem.TipoPosicion = "ZE10";
                                    //}
                                    //else if (this._lvLstLotes.Count > 1)// && objItem.TipoPosicion == "ZE10")
                                    //{
                                    //    objItem.TipoPosicion = "Z010";
                                    //}
                                }
                                else if (ParametroBC.Instance.esTipoX(objItem.Material.TipoMaterial, "NA3")) //-- NA3 siempre con ZE10 - Con o Sin Stock
                                {
                                    if (!objItem.TipoPosicion.Equals("Z010"))
                                    {
                                        //objItem.TipoPosicion = "ZE10";
                                    }
                                }
                            }
                        }
                        lblTipoPosicion.Text = objItem.TipoPosicion;
                        //if (Session["esPrimera"] != null && (bool)Session["esPrimera"])
                        //    objItem.CambAlmacen = true;
                        //if (Session["ultimaPosAdd"] != null || objItem.CambAlmacen)
                        //{
                        //    if (Session["ultimaPosAdd"] == null && objItem.CambAlmacen)
                        //        Session["ultimaPosAdd"] = 0;

                        //    if ((int)Session["ultimaPosAdd"] == int.Parse(objItem.Posicion) || objItem.CambAlmacen)
                        //    {
                        //        objItem.CambAlmacen = false;

                        //        //-- Si es NA2
                        //        if (ParametroBC.Instance.esTipoX(objItem.Material.TipoMaterial, "NA2")
                        //            && !ParametroBC.Instance.esTipoX(objItem.TipoPosicion, "TipoPosCombo"))
                        //        {
                        //            if (this._lvLstLotes.Count <= 1) // Si solo hay un lote, no hay stock (es el item que dice "ninguno")
                        //            //&& objItem.TipoPosicion == "Z010")
                        //            {
                        //                objItem.TipoPosicion = "ZE10";
                        //            }
                        //            else if (this._lvLstLotes.Count > 1)// && objItem.TipoPosicion == "ZE10")
                        //            {
                        //                objItem.TipoPosicion = "Z010";
                        //            }
                        //        }
                        //        //-- NA3 siempre con ZE10 - Con o Sin Stock
                        //        if (ParametroBC.Instance.esTipoX(objItem.Material.TipoMaterial, "NA3")
                        //            && !ParametroBC.Instance.esTipoX(objItem.TipoPosicion, "TipoPosCombo"))
                        //        {
                        //            if (!objItem.TipoPosicion.Equals("Z010"))
                        //            {
                        //                objItem.TipoPosicion = "ZE10";
                        //            }
                        //        }

                        //        lblTipoPosicion.Text = objItem.TipoPosicion;
                        //    }
                        //    Session.Remove("ultimaPosAdd");
                        //}
                    }
                }
                //-- FIN TipoPosición según tipo de material NA1, NA2, NA3 :: Requerimiento 06.04.2011

                //bloqueo el textbox si es distinto de Z010 O ZE10-------------------------------
                if (ParametroBC.Instance.esTipoX(((TextBox)e.Row.FindControl("lblTipoPosicion")).Text.Trim(), "tipoPosEditable"))
                {
                    ((TextBox)e.Row.FindControl("lblTipoPosicion")).Enabled = true;
                }
            }
        }

        /// <summary>
        /// nuevo método para distribuir StockBE en CAL
        /// </summary>
        /// <param name="selCentro">Centro seleccionado</param>
        /// <param name="selAlm">Alm seleccionado</param>
        /// <param name="list">lista stockbe</param>
        /// <param name="lstCentro">ref lista centro</param>
        /// <param name="lstAlmacen">ref lista alm</param>
        /// <param name="lstLote">ref lista lot</param>
        private void DistribuirCAL(string selCentro, string selAlm, List<StockBE> list, ref List<GenericBE> lstCentro, ref List<GenericBE> lstAlmacen, ref List<GenericBE> lstLote)
        {
            lstCentro.Clear(); lstAlmacen.Clear(); lstLote.Clear();
            string charSep = ParametroBC.Instance.getParamValue("charSep");
            GenericBE objItem, objAux;
            List<StockBE> lstAux;

            //Añadir todos los centros
            foreach (StockBE obj in list)
            {
                objAux = null;
                objAux = lstCentro.Find(X => X.Codigo == obj.CodCentro);
                if (objAux == null)
                {
                    objAux = new GenericBE();
                    objAux.Codigo = obj.CodCentro;
                    objAux.Descripcion = obj.CodCentro + charSep + obj.DescCentro;
                    lstCentro.Add(objAux);
                }
            }
            if (string.IsNullOrEmpty(selCentro) && lstCentro.Count > 0)
            {
                selCentro = lstCentro[0].Codigo;
            }
            //Añadir almacenes para el centro
            if (cmbTipoDocumento.SelectedValue == "Z034")
            {
                objAux = null;
                objAux = new GenericBE();
                objAux.Codigo = "0001";
                objAux.Descripcion = "0001 (Tienda)"; //obj.CodAlmacen + charSep + obj.DescAlmacen;
                lstAlmacen.Add(objAux);
            }
            else
            {
                lstAux = list.FindAll(X => X.CodCentro == selCentro);
                foreach (StockBE obj in lstAux)
                {
                    objAux = null;
                    objAux = lstAlmacen.Find(X => X.Codigo == obj.CodAlmacen);
                    if (objAux == null)
                    {
                        objAux = new GenericBE();
                        objAux.Codigo = obj.CodAlmacen;
                        objAux.Descripcion = obj.DescAlmacen; //obj.CodAlmacen + charSep + obj.DescAlmacen;
                        lstAlmacen.Add(objAux);
                    }
                }
            }
            if (string.IsNullOrEmpty(selAlm) && lstAlmacen.Count > 0)
            {
                selAlm = lstAlmacen[0].Codigo;
            }
            //Añadir lotes para el centro/almacen
            //rgutierrez 29.12.2011
            lstAux = list.FindAll(X => X.CodCentro == selCentro && X.CodAlmacen == selAlm && !X.CodLote.Equals(string.Empty) && !ParametroBC.Instance.esTipoX(X.ValorCaracteristica, "LoteComercial"));
            //lstAux = list.FindAll(X => X.CodCentro == selCentro && X.CodAlmacen == selAlm && !X.CodLote.Equals(string.Empty));

            //ordenar de menor a mayor para dejar el lote óptimo en la primera posición
            lstAux.Sort(delegate(StockBE p1, StockBE p2) { return p1.StockDisponible.CompareTo(p2.StockDisponible); });

            lstAux.AddRange(list.FindAll(X => X.CodCentro == selCentro && X.CodAlmacen == selAlm && !X.CodLote.Equals(string.Empty) && ParametroBC.Instance.esTipoX(X.ValorCaracteristica, "LoteComercial")));
            if (cmbTipoDocumento.SelectedValue != "Z034")
            {
                foreach (StockBE obj in lstAux)
                {
                    objAux = new GenericBE();
                    objAux.Codigo = obj.CodLote;
                    objAux.Descripcion = obj.CodLote + charSep + "Stk = " + string.Format("{0:0,0.0}", obj.StockDisponible);

                    lstLote.Add(objAux);
                }
            }
        }

        //rgutierrez 15.11.2011
        //private decimal calculaRendimiento(decimal pCant, decimal pRend)
        //{
        //    if (pRend != 0m)
        //    {
        //        decimal residuo = pCant % pRend, ajuste = 0m;
        //        if (residuo != 0) { ajuste = 1m; }
        //        decimal nuevaCant = (Math.Truncate(pCant / pRend) + ajuste) * pRend;
        //        return decimal.Round(nuevaCant, ParametroBC.Instance.getDecimales);
        //    }
        //    return decimal.Round(pCant, ParametroBC.Instance.getDecimales);
        //}
        
        protected void cmbCentro_SelectedIndexChanged(object sender, EventArgs e)
        {
            //--- cmbCentro_SelectedIndexChanged
            string lpCodCentro = ((DropDownList)sender).SelectedValue;

            DataControlFieldCell lpDlMateriales = ((DataControlFieldCell)(((DropDownList)sender).Parent));
            //GridViewRow lpDlMateriales = ((GridViewRow)(((DropDownList)sender).Parent));
            DropDownList cmbAlmacen = (DropDownList)lpDlMateriales.FindControl("cmbAlmacen");

            //-- seleccionar los valores q se tienen en sesion
            HiddenField hidPosicion = (HiddenField)lpDlMateriales.FindControl("hidPosicion");
            string posActual = hidPosicion.Value.PadLeft(6, '0');
            PedidoBE objPedido = (PedidoBE)Session["Pedido"];
            List<DetalleBE> lstDetalle = objPedido.Detalle;
            DetalleBE objItem = lstDetalle.Find(delegate(DetalleBE obj) { return obj.Posicion == posActual; });

            if (cmbAlmacen != null && objItem != null)
            {
                objItem.CodCentro = lpCodCentro;

                //- Cambio 08.04.2011
                _lvCALSessKey = _lvPreCALSessKey + objItem.PosicionCorto;
                this._lvLstCAL = (List<StockBE>)Session[_lvCALSessKey];
                //-- distribuir en lstCentro, lstAlmacen, lstLotes
                this.DistribuirCAL(objItem.CodCentro, objItem.CodAlmacen, this._lvLstCAL, ref this._lvLstCentros, ref this._lvLstAlmacenes, ref this._lvLstLotes);
                //- Fin cambio 08.04.2011
                
                //this._lvLstAlmacenes = AlmacenBC.Instance.listar(objItem.Material, objItem.CodCentro);
                cmbAlmacen.DataSource = this._lvLstAlmacenes;
                cmbAlmacen.DataTextField = "Descripcion";
                cmbAlmacen.DataValueField = "Codigo";
                cmbAlmacen.DataBind();
                try
                {
                    if (this._lvLstAlmacenes.Count > 0) { cmbAlmacen.SelectedValue = "0001"; }
                }
                catch { }

                try
                {
                    if (objItem != null && objItem.CodAlmacen != null)
                    {
                        cmbAlmacen.SelectedValue = objItem.CodAlmacen;
                    }
                    else
                    {
                        this.DistribuirCAL(objItem.CodCentro, cmbAlmacen.SelectedValue, this._lvLstCAL, ref this._lvLstCentros, ref this._lvLstAlmacenes, ref this._lvLstLotes);
                        //- Fin cambio 08.04.2011
                    }
                }
                catch { }

                //--- carga data de Lote:
                DropDownList cmbLote = (DropDownList)lpDlMateriales.FindControl("cmbLote");
                if (cmbLote != null)
                {
                    TextBox txtCantidad = (TextBox)lpDlMateriales.FindControl("txtCantidad");
                    //---
                    decimal dCantidad = 0m;
                    try { dCantidad = Convert.ToDecimal(txtCantidad.Text); }
                    catch { }
                    string pCodLoteOptimo = "";

                    //--- si no es tipo de doc sin lote, no trae la lista de lotes disponibles
                    //this._lvLstLotes = new List<GenericBE>();
                    if (!ParametroBC.Instance.esTipoSinLote(objPedido.CodTipoDoc))
                    {
                        objItem.CodAlmacen = cmbAlmacen.SelectedValue;
                        objItem.Cantidad = dCantidad;

                        if (this._lvLstLotes.Count == 0)
                        {
                            // Si es vta con stock : IM ó NA1, se pinta de rojo
                            if (ParametroBC.Instance.esTipoX(objItem.Material.TipoMaterial, "VtaConStock"))
                            {
                                lpDlMateriales.BackColor = System.Drawing.Color.LightPink;
                            }
                            else// si no es vta con stock : NA2 ó NA3, se pinta de amarillo
                            {
                                lpDlMateriales.BackColor = System.Drawing.Color.LightYellow;
                            }
                            lpDlMateriales.ToolTip = ParametroBC.Instance.getParamValue("msgMatSinStock");
                        }
                    }

                    GenericBE objVacio = new GenericBE(); objVacio.Codigo = ""; objVacio.Descripcion = "- ninguno -";
                    this._lvLstLotes.Add(objVacio);
                    cmbLote.DataSource = this._lvLstLotes;
                    cmbLote.DataTextField = "Descripcion";
                    cmbLote.DataValueField = "Codigo";
                    cmbLote.DataBind();
                    cmbLote.SelectedValue = "";

                    //selecciono lote óptimo
                    try
                    {
                        if (!ParametroBC.Instance.esTipoOferta(objPedido.CodTipoDoc))
                        {
                            cmbLote.SelectedIndex = 0;//lote óptimo siempre es el primero
                            //if (pCodLoteOptimo != "") { cmbLote.SelectedValue = pCodLoteOptimo; }
                        }
                    }
                    catch { }
                }
            }
            //-------------------------------------
        }

        protected void cmbAlmacen_SelectedIndexChanged(object sender, EventArgs e)
        {
            //--- cmbAlmacen_SelectedIndexChanged
            string lpCodAlmacen = ((DropDownList)sender).SelectedValue;
            //DataListItem lpDlMateriales = ((DataListItem)(((DropDownList)sender).Parent));
            DataControlFieldCell lpDlMateriales = ((DataControlFieldCell)(((DropDownList)sender).Parent));

            DropDownList cmbCentro = (DropDownList)lpDlMateriales.FindControl("cmbCentro");
            DropDownList cmbAlmacen = (DropDownList)sender;
            DropDownList cmbLote = (DropDownList)lpDlMateriales.FindControl("cmbLote");

            //-- seleccionar los valores q se tienen en sesion
            HiddenField hidPosicion = (HiddenField)lpDlMateriales.FindControl("hidPosicion");
            string posActual = hidPosicion.Value.PadLeft(6, '0');
            PedidoBE objPedido = (PedidoBE)Session["Pedido"];
            List<DetalleBE> lstDetalle = objPedido.Detalle;
            DetalleBE objItem = lstDetalle.Find(delegate(DetalleBE obj) { return obj.Posicion == posActual; });

            if (cmbLote != null && objItem != null)
            {
                TextBox txtCantidad = (TextBox)lpDlMateriales.FindControl("txtCantidad");
                decimal dCantidad = 0m;
                try { dCantidad = Convert.ToDecimal(txtCantidad.Text); }
                catch //(Exception ex) 
                { dCantidad = 0m; }
                string pCodLoteOptimo = "";

                //this._lvLstLotes = new List<GenericBE>();
                if (!ParametroBC.Instance.esTipoSinLote(objPedido.CodTipoDoc))
                {
                    objItem.CodCentro = cmbCentro.SelectedValue;
                    objItem.CodAlmacen = cmbAlmacen.SelectedValue;
                    objItem.Cantidad = dCantidad;

                    //- Cambio 08.04.2011
                    _lvCALSessKey = _lvPreCALSessKey + objItem.PosicionCorto;
                    this._lvLstCAL = (List<StockBE>)Session[_lvCALSessKey];
                    //-- distribuir en lstCentro, lstAlmacen, lstLotes
                    this.DistribuirCAL(objItem.CodCentro, objItem.CodAlmacen, this._lvLstCAL, ref this._lvLstCentros, ref this._lvLstAlmacenes, ref this._lvLstLotes);
                    //- Fin cambio 08.04.2011

                    if (this._lvLstLotes.Count == 0)
                    {
                        // Si es vta con stock : IM ó NA1, se pinta de rojo
                        if (ParametroBC.Instance.esTipoX(objItem.Material.TipoMaterial, "VtaConStock"))
                        {
                            lpDlMateriales.BackColor = System.Drawing.Color.LightPink;
                        }
                        else// si no es vta con stock : NA2 ó NA3, se pinta de amarillo
                        {
                            lpDlMateriales.BackColor = System.Drawing.Color.LightYellow;
                        }
                        lpDlMateriales.ToolTip = ParametroBC.Instance.getParamValue("msgMatSinStock");
                    }
                }

                GenericBE objVacio = new GenericBE(); objVacio.Codigo = ""; objVacio.Descripcion = "- ninguno -";
                this._lvLstLotes.Add(objVacio);
                cmbLote.DataSource = this._lvLstLotes;
                cmbLote.DataTextField = "Descripcion";
                cmbLote.DataValueField = "Codigo";
                cmbLote.DataBind();
                cmbLote.SelectedValue = "";

                //--- seleccionar el lote óptimo
                try
                {
                    if (!ParametroBC.Instance.esTipoOferta(objPedido.CodTipoDoc))
                    {
                        cmbLote.SelectedIndex = 0;//lote óptimo siempre está en la primera posición
                    }
                }
                catch //(Exception ex) 
                { }
            }
            //-------------------------------------
        }

        protected void cmbCondExp_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                this._lvObjPedido = (PedidoBE)Session["Pedido"];
                if (cmbCondExp.SelectedIndex >= 0)
                {
                    foreach (GridViewRow item in cgvMateriales.Rows)
                    {
                        if (item.RowType == DataControlRowType.DataRow)
                        {
                            DropDownList cmbPrioridadEnt = (DropDownList)item.FindControl("cmbPrioridadEnt");
                            cmbPrioridadEnt.SelectedValue = cmbCondExp.SelectedValue;
                            LinkButton lnkReparto = (LinkButton)item.FindControl("lnkReparto");

                            HiddenField hidPosicion = (HiddenField)item.FindControl("hidPosicion");
                            DetalleBE tmpDet = this._lvObjPedido.Detalle.Find(X => X.Posicion == hidPosicion.Value);
                            tmpDet.PrioridadEntrega = cmbPrioridadEnt.SelectedValue;

                            this.calculaFechaEntregaItem(tmpDet);

                            DateTime fec = tmpDet.Repartos[0].FechaEntrega;
                            txtFechaEntrega.Text = fec.ToString("dd/MM/yyyy");
                            lnkReparto.Text = tmpDet.PrioridadEntrega + " " + fec.ToString("dd/MM/yy");
                        }
                    }
                    tcMain.ActiveTabIndex = 1;
                    Session["Pedido"] = this._lvObjPedido;
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        protected void txtFechaEntrega_TextChanged(object sender, EventArgs e)
        {
            try
            {
                this._lvObjPedido = (PedidoBE)Session["Pedido"];
                if (!txtFechaEntrega.Text.Equals(""))
                {
                    foreach (GridViewRow item in cgvMateriales.Rows)
                    {
                        if (item.RowType == DataControlRowType.DataRow)
                        {
                            LinkButton lnkReparto = (LinkButton)item.FindControl("lnkReparto");
                            DateTime fec = Convert.ToDateTime(txtFechaEntrega.Text);

                            HiddenField hidPosicion = (HiddenField)item.FindControl("hidPosicion");
                            DetalleBE tmpDet = this._lvObjPedido.Detalle.Find(X => X.Posicion == hidPosicion.Value);

                            tmpDet.Repartos.Clear();
                            RepartoBE itmRep = new RepartoBE();
                            itmRep.FechaEntrega = fec;
                            itmRep.CantPed = tmpDet.Cantidad;
                            itmRep.CantConf = tmpDet.Cantidad;
                            

                            tmpDet.Repartos.Add(itmRep);

                            this.calculaFechaEntregaItem(tmpDet);

                            fec = tmpDet.Repartos[0].FechaEntrega;
                            txtFechaEntrega.Text = fec.ToString("dd/MM/yyyy");
                            lnkReparto.Text = tmpDet.PrioridadEntrega + " " + fec.ToString("dd/MM/yy");
                        }
                    }
                    tcMain.ActiveTabIndex = 1;
                    Session["Pedido"] = this._lvObjPedido;
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        private bool documentoValido()
        {
            this._lvObjPedido = (PedidoBE)Session["Pedido"];
            //----------------
            string op = "";
            if (Session["Operacion"] != null)
            {
                op = Session["Operacion"].ToString();
            }

            if (ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "CodPedServ"))
            {
                bool tieneEstiba = false, estibaEspecial = false;
                foreach (DetalleBE objItem in this._lvObjPedido.Detalle)
                {
                    if (objItem.Material.EspecialServ && objItem.Material.EsEstiba)
                    {
                        estibaEspecial = true;
                    }
                    if (objItem.Material.EsEstiba)
                    {
                        tieneEstiba = true;
                    }
                }
                if (tieneEstiba)
                {
                    //Validar máximo de pisos:
                    int maxPisos; int numPisos;
                    try
                    {
                        maxPisos = Convert.ToInt16(ParametroBC.Instance.getParamValue("MaxPisoSinAsc"));
                    }
                    catch { maxPisos = 0; }
                    try
                    {
                        numPisos = Convert.ToInt16(txtNpisos.Text);
                    }
                    catch { numPisos = 0; }

                    if (numPisos > maxPisos && !chkAscensor.Checked && !estibaEspecial)
                    {
                        Session["Mensaje"] = string.Format(ParametroBC.Instance.getParamValue("msgErrMaxPisos"), maxPisos.ToString());
                        //"Documento inválido, se excedió el número de pisos permitidos sin ascensor.";
                        tcMain.ActiveTabIndex = 0;
                        return false;
                    }
                    else if (numPisos <= 0m)
                    {
                        Session["Mensaje"] = string.Format(ParametroBC.Instance.getParamValue("msgErrEstiba"));
                        //"Documento inválido, debe indicar el número de pisos para realizar la estiba.";
                        tcMain.ActiveTabIndex = 0;
                        return false;
                    }
                }
            }

            //solo validar cuando se crea el documento
            //rgutierrez 12.01.2012
            //if (txtCodVendedorWeb.Text.Equals("") && !op.ToLower().Equals("editar") && !ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "CodNCND"))
            if (txtCodVendedor1.Text.Equals("") && !op.ToLower().Equals("editar") && !ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "CodNCND"))
            {
                Session["Mensaje"] = "Documento inválido, no se ha especificado el Vendedor.";
                tcMain.ActiveTabIndex = 0;
                return false;
            }

            if (cmbCondicionesPago.SelectedValue == "")
            {
                Session["Mensaje"] = "Documento incompleto, por favor ingrese la cond. de pago";
                tcMain.ActiveTabIndex = 0;
                cmbCondicionesPago.Focus();
                return false;
            }

            //--- valida motivo de pedido si es NC o ND
            if (string.IsNullOrEmpty(cmbMotivo.SelectedValue) &&
                ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "CodNCND"))
            {
                Session["Mensaje"] = "Documento incompleto, por favor ingrese el motivo de pedido.";
                tcMain.ActiveTabIndex = 0;
                return false;
            }

            //--- validar interlocutores...
            if (txtNomSolicitante.Text.Equals("") || ddlCodpSolicitante.SelectedValue.Equals("") ||
                txtNomResPago.Text.Equals("") || ddlCodpResPago.SelectedValue.Equals(""))
            {
                Session["Mensaje"] = "Documento incompleto, debe ingresar al menos el Nombre y Código postal del Solicitante/Resp. Pago";
                tcMain.ActiveTabIndex = 0;
                return false;
            }

            if ((string.IsNullOrEmpty(txtTotal.Text) ||
                Convert.ToDecimal(txtTotal.Text) <= 0m) &&
                cmbTipoDocumento.SelectedValue != ParametroBC.Instance.getParamValue("CodReserva"))
            {
                Session["Mensaje"] = "Documento inválido, total del documento no puede ser menor o igual a cero";
                tcMain.ActiveTabIndex = 1;
                return false;
            }
            //************************************************************************************************************+
            //rhuapaya 28.06.2012 @@@ se agrego la validación 
            //En el pedido de venta, canal corporativo, debe ingresarse  el nombre del proyecto y la atención  en las observaciones (obligatorio)
            if (!ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "CodServicios"))
            {
                if (txtNomProyecto.Text.Trim() == "" && cmbCanalDist.SelectedValue == "30")
                {
                    Session["Mensaje"] = "Documento inválido, ingrese el nombre del proyecto.";
                    tcMain.ActiveTabIndex = 0;
                    return false;
                }
                string atencion = _lvObjPedido.Textos.Find(x => x.CodTexto == "ZP01").Descripcion;
                if (atencion == "" && cmbCanalDist.SelectedValue == "30")
                {
                    Session["Mensaje"] = "Documento inválido, ingrese una descripción de atención en las observaciones.";
                    tcMain.ActiveTabIndex = 0;
                    return false;
                }
            }
            //valida ruc de eventual
            //string ruc = _lvObjPedido.Interlocutores.Find(x => x.Cliente.Eventual = true && x.Cliente.Funcion = "ZE00").Cliente.Ruc;
            //if (_lvObjPedido.Interlocutores[0].Cliente.es)
            //{ 
            
            //}
            //if (cmbTipoDocumento.SelectedValue == "Z001")
            //{
            //    if (txtNomProyecto.Text.Trim() == "" && cmbCanalDist.SelectedValue == "30")
            //    {
            //        Session["Mensaje"] = "Documento inválido, ingrese el nombre del proyecto.";
            //        tcMain.ActiveTabIndex = 0;
            //        return false;
            //    }
            //    string atencion = _lvObjPedido.Textos.Find(x => x.CodTexto == "ZP01").Descripcion;
            //    if (atencion == "" && cmbCanalDist.SelectedValue == "30")
            //    {
            //        Session["Mensaje"] = "Documento inválido, ingrese una descripción de atención en las observaciones.";
            //        tcMain.ActiveTabIndex = 0;
            //        return false;
            //    }
            //}
            //************************************************************************************************************+
            //validamos que el pocentaje de descuento adicional (ZD12) no sea mayor ni menor al que viene
            //rhuapaya 25.06.2012 @@@
            if (txtDsctoAdicional.Visible == true)
            {
                validaDsctoAdicional = true;
                if (txtDsctoAdicional.Text.Trim() != "" && Convert.ToDecimal(txtDsctoAdicional.Text) != 0)
                {
                    if (Convert.ToDecimal(hfDsctoAdi.Value) != Convert.ToDecimal(txtDsctoAdicional.Text))
                    {
                        Session["Mensaje"] = "El descuento no puede ser mayor ni menor al descuento dado.";
                        validaDsctoAdicional = false;
                        tcMain.ActiveTabIndex = 0;
                        txtDsctoAdicional.Focus();
                        return false;
                    }
                }
            }
            //-- si el documento NO es reserva (si es reserva no toma en cuenta los totales)
            //if (cmbTipoDocumento.SelectedValue != ParametroBC.Instance.getParamValue("CodReserva"))
            //{

            string retMsg = "";
            foreach (DetalleBE objItem in this._lvObjPedido.Detalle)
            {
                if (objItem.CodCentro.TrimStart('0') == "9160")
                {
                    //retMsg += "No se permite asignar stock del 9160:LIMASA."; comentado 23.04.2013
                    //tcMain.ActiveTabIndex = 1; comentado 23.04.2013
                    //break; comentado 23.04.2013
                }
                if (!ParametroBC.Instance.esTipoPosCombo(objItem.TipoPosicion))// && !ParametroBC.Instance.esTipoCabKit(objItem.TipoPosicion))
                {
                    //-- Limitación de prioridad de entrega para canal 10 y vkorg 1000
                    if (cmbOrgVtas.SelectedValue == "1000" &&
                        cmbCanalDist.SelectedValue == "10" &&
                        ParametroBC.Instance.esTipoX(this._lvObjPedido.CodTipoDoc, "CodSinDesp"))
                    {
                        if (objItem.PrioridadEntrega != "03" && objItem.PrioridadEntrega != "04")
                        {
                            //retMsg += string.Format("- Prioridad de Entrega en posición {0} no permitida para canal 10.\r\n", objItem.Posicion, cmbCanalDist.SelectedValue);
                            retMsg += string.Format(ParametroBC.Instance.getParamValue("msgLprioCanal"), objItem.Posicion, cmbCanalDist.SelectedValue);
                            tcMain.ActiveTabIndex = 1;
                            break;
                        }
                    }

                    if (objItem.Cantidad <= 0)
                    {
                        retMsg += string.Format(ParametroBC.Instance.getParamValue("msgCantMCero"), objItem.Posicion);
                        //retMsg += string.Format("- Cantidad en posición {0} no puede ser menor o igual a cero.\n", objItem.Posicion);
                        tcMain.ActiveTabIndex = 1;
                        break;
                    }


                    //decimal pSubtotal = objItem.Cantidad * objItem.PrecioUnitario;
                    decimal pSubtotal = objItem.SubTotal;
                    if (pSubtotal <= 0m &&
                        !ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "CodReserva"))
                    {
                        retMsg += string.Format("- Subtotal en posición {0} no puede ser menor o igual a cero.\n", objItem.Posicion);
                        tcMain.ActiveTabIndex = 1;
                        break;
                    }

                    //----
                    if (ParametroBC.Instance.esTipoX(objItem.PrioridadEntrega, "CodDespacho")
                        && txtDirDestMerc.Text.Trim().Equals("") && !ParametroBC.Instance.esTipoOferta(cmbTipoDocumento.SelectedValue))
                    {
                        retMsg += string.Format("- Debe especificar la dirección del Dest. de Mercancías para realizar la entrega de la posición {0}.\n", objItem.Posicion);
                        tcMain.ActiveTabIndex = 0;
                        break;
                    }
                    //----

                    if (objItem.PrioridadEntrega == "" &&
                        !ParametroBC.Instance.esTipoOferta(cmbTipoDocumento.SelectedValue) &&
                        !ParametroBC.Instance.esTipoServicio(cmbTipoDocumento.SelectedValue) &&
                        !ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "CodNCND") &&
                        !ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "CodReserva") &&
                        !cmbTipoDocumento.SelectedValue.Equals("Z037") &&
                        !cmbTipoDocumento.SelectedValue.Equals("Z036"))
                    {
                        retMsg += string.Format("- Falta especificar la Prioridad de Entrega en posición {0}.\n", objItem.Posicion);
                        tcMain.ActiveTabIndex = 1;
                        break;
                    }

                    if (string.IsNullOrEmpty(objItem.CodLote) &&
                        ParametroBC.Instance.esTipoX(objItem.Material.TipoMaterial, "VtaConStock") &&
                        !ParametroBC.Instance.esTipoOferta(cmbTipoDocumento.SelectedValue) &&
                        !ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "CodNCND") &&
                        !ParametroBC.Instance.esTipoSinLote(cmbTipoDocumento.SelectedValue))
                    {
                        if (objItem.Material.TipoMaterial.Equals("NA1"))
                            retMsg += string.Format(" {0}" + ParametroBC.Instance.getParamValue("msjErrorNA1SS") + " .\n", objItem.Material.CodMaterialCorto);
                        else
                            retMsg += string.Format("- Falta especificar el Lote en posición {0}.\n", objItem.Posicion);

                        tcMain.ActiveTabIndex = 1;
                        break;
                    }

                }
            }
            if (retMsg != string.Empty) { 
                Session["Mensaje"] = retMsg; 
                return false; 
            }
            //}
            return true;
        }

        #region Limpia Pantalla
        private void limpiarCliente()
        {
            Session.Remove("Cliente");
            //txtCodCliente.Text = string.Empty;
            txtNomCliente.Text = string.Empty;
            txtDirCliente.Text = string.Empty;
            //---
            txtCodCliente.ReadOnly = false;
            txtNomCliente.ReadOnly = false;
            aceNomCliente.Enabled = true;
        }
        private void limpiarClienteEventual()
        {
            Session.Remove("ClienteEventual");

            txtCodSolicitante.Text = string.Empty;
            txtNomSolicitante.Text = string.Empty;
            txtDirSolicitante.Text = string.Empty;
            ddlCodpSolicitante.SelectedValue = string.Empty;
            txtTelSolicitante.Text = string.Empty;
            txtNifSolicitante.Text = string.Empty;
        }
        private void limpiarInterlocutores()
        {
            Session.Remove("Interlocutores");
            PedidoBE objTmp = (PedidoBE)Session["Pedido"];
            if (objTmp != null) { objTmp.Interlocutores = null; }
            Session["Pedido"] = objTmp;

            txtCodSolicitante.Text = string.Empty;
            txtNomSolicitante.Text = string.Empty;
            txtDirSolicitante.Text = string.Empty;
            ddlCodpSolicitante.SelectedValue = string.Empty;
            txtTelSolicitante.Text = string.Empty;
            txtNifSolicitante.Text = string.Empty;
            //---
            txtCodDestMerc.Text = string.Empty;
            txtNomDestMerc.Text = string.Empty;
            txtDirDestMerc.Text = string.Empty;
            ddlCodpDestMerc.SelectedValue = string.Empty;
            txtTelDestMerc.Text = string.Empty;
            //---
            txtCodDestFact.Text = string.Empty;
            txtNomDestFact.Text = string.Empty;
            txtDirDestFact.Text = string.Empty;
            ddlCodpDestFact.SelectedValue = string.Empty;
            txtTelDestFact.Text = string.Empty;
            //---
            txtCodResPago.Text = string.Empty;
            txtNomResPago.Text = string.Empty;
            txtDirResPago.Text = string.Empty;
            ddlCodpResPago.SelectedValue = string.Empty;
            txtTelResPago.Text = string.Empty;
            txtNifResPago.Text = string.Empty;
            //---
            txtCodAgTrans.Text = string.Empty;
            txtNomAgTrans.Text = string.Empty;

            //rgutierrez 22.11.2011
            txtDirAgTrans.Text = string.Empty;
            ddlCodpAgTrans.SelectedValue = string.Empty;
            txtTelAgTrans.Text = string.Empty;
            txtNifAgTrans.Text = string.Empty;

            //rgutierrez 12.01.2012
            //txtCodVendedor1.Text = string.Empty;
            //txtNomVendedor1.Text = string.Empty;
            txtCodVendedorWeb.Text = string.Empty;
            txtNomVendedorWeb.Text = string.Empty;

            cmbVendedor2.SelectedValue = "";
            cmbVendedor3.SelectedValue = "";
            
            txtCodProfesional.Text = string.Empty;
            txtNomProfesional.Text = string.Empty;

            //rgutierrez 22.11.2011
            txtDirProfesional.Text = string.Empty;
            ddlCodpProfesional.SelectedValue = string.Empty;
            txtTelProfesional.Text = string.Empty;
            //txtNifProfesional.Text = string.Empty;

            //rgutierrez 28.12.2011
            txtCodProfesional2.Text = string.Empty;
            txtNomProfesional2.Text = string.Empty;
            txtDirProfesional2.Text = string.Empty;
            ddlCodpProfesional2.SelectedValue = string.Empty;
            txtTelProfesional2.Text = string.Empty;
        }
        private void limpiarTextos()
        {
            txtTextoAtencion.Text = string.Empty;
            //txtTextoJefeTienda.Text = string.Empty;
            txtTextoObsAdministrativas.Text = string.Empty;
            txtTextoRefDireccion.Text = string.Empty;
            txtTextoRefFactura.Text = string.Empty;
            txtTextoTiempoEntrega.Text = string.Empty;
            txtTextoTransporte.Text = string.Empty;

            txtTextoResultadoVisita.Text = string.Empty;
            txtTextDatosAdicClienteVisita.Text = string.Empty;
            txtTextDescVisita.Text = string.Empty;
            txtTextoContactoVisita.Text = string.Empty;
            txtTextTelefonosVisita.Text = string.Empty;
            lnkShowPopUpTextosVisita.Text = "";

            txtPedidoVenta12.Text = "";
            txtPedidoVenta12.Text = "";
            txtPedidoVenta12.Text = "";
            txtPedidoVenta12.Text = "";

            txtPedidoVisita12.Text = "";
            txtPedidoVisita22.Text = "";
            txtPedidoVisita32.Text = "";
            txtPedidoVisita42.Text = "";
        }
        #endregion

        private void copiarClienteEventual()
        {
            ClienteBE objTempCliente = new ClienteBE(); objTempCliente.Descripcion = "";
            if (txtNomDestMerc.Text == string.Empty || txtNomDestMerc.Text == objTempCliente.Descripcion)
            {
                txtNomDestMerc.Text = txtNomSolicitante.Text;
            }
            if (txtDirDestMerc.Text.Equals(""))
            {
                txtDirDestMerc.Text = txtDirSolicitante.Text;
                try
                {
                    ddlCodpDestMerc.SelectedValue = ddlCodpSolicitante.SelectedValue;
                }
                catch 
                {
                    ddlCodpDestMerc.SelectedValue = string.Empty;
                }
                
                txtTelDestMerc.Text = txtTelSolicitante.Text;
            }

            if (txtNomDestFact.Text == string.Empty || txtNomDestFact.Text == objTempCliente.Descripcion)
            {
                txtNomDestFact.Text = txtNomSolicitante.Text;
            }
            if (txtDirDestFact.Text.Equals(""))
            {
                txtDirDestFact.Text = txtDirSolicitante.Text;
                try
                {
                    ddlCodpDestFact.SelectedValue = ddlCodpSolicitante.SelectedValue;
                }
                catch 
                {
                    ddlCodpDestFact.SelectedValue = string.Empty;
                }
                
                txtTelDestFact.Text = txtTelSolicitante.Text;
            }

            if (txtNomResPago.Text == string.Empty || txtNomResPago.Text == objTempCliente.Descripcion)
            {
                txtNomResPago.Text = txtNomSolicitante.Text;
                txtDirResPago.Text = txtDirSolicitante.Text;
                try
                {
                    ddlCodpResPago.SelectedValue = ddlCodpSolicitante.SelectedValue;
                }
                catch 
                {
                    ddlCodpResPago.SelectedValue = string.Empty;
                }
                
                txtTelResPago.Text = txtTelSolicitante.Text;
                txtNifResPago.Text = txtNifSolicitante.Text;
            }
        }

        private void cargarInterlocutores()
        {
            if (Session["Cliente"] != null)
            {
                ClienteBE pObjCliente = (ClienteBE)Session["Cliente"];
                if (pObjCliente != null && pObjCliente.Codigo != null)
                {
                    if (Session["Pedido"] != null)
                    {
                        this._lvObjPedido = (PedidoBE)Session["Pedido"];
                        txtCorreo.Text = this._lvObjPedido.Mail;
                    }
                    if (pObjCliente.Eventual)
                    {
                        //--- habilitar campos de solicitante
                        txtCodSolicitante.ReadOnly = true;
                        txtNomSolicitante.ReadOnly = false;
                        txtDirSolicitante.ReadOnly = false;
                        ddlCodpSolicitante.Enabled = true;
                        txtTelSolicitante.ReadOnly = false;
                        txtNifSolicitante.ReadOnly = false;
                        //--- deshabilitar auto complete
                        aceNomSolicitante.Enabled = false;
                        txtNomSolicitante.Focus();

                        txtCodSolicitante.Text = pObjCliente.Codigo;
                        txtCodDestMerc.Text = pObjCliente.Codigo;
                        txtCodDestFact.Text = pObjCliente.Codigo;
                        txtCodResPago.Text = pObjCliente.Codigo;

                    }
                    else
                    {
                        //--- deshabilitar campos del solicitante
                        txtCodSolicitante.ReadOnly = true;
                        txtNomSolicitante.ReadOnly = true;
                        txtDirSolicitante.ReadOnly = true;
                        ddlCodpSolicitante.Enabled = false;
                        txtTelSolicitante.ReadOnly = true;
                        txtNifSolicitante.ReadOnly = true;
                        //--- habilitar auto complete
                        aceNomSolicitante.Enabled = true;

                        txtCodSolicitante.Text = pObjCliente.Codigo;
                        txtNomSolicitante.Text = pObjCliente.Descripcion;
                        txtDirSolicitante.Text = pObjCliente.Direccion;
                        
                        try
                        {
                            ddlCodpSolicitante.SelectedValue = pObjCliente.CodigoPostal;
                        }
                        catch { ddlCodpSolicitante.SelectedValue = string.Empty; }
                        txtTelSolicitante.Text = pObjCliente.Telefono;
                        txtNifSolicitante.Text = pObjCliente.Ruc;
                        //---
                        txtCodDestMerc.Text = pObjCliente.Codigo;
                        txtNomDestMerc.Text = pObjCliente.Descripcion;
                        txtDirDestMerc.Text = pObjCliente.Direccion;
                      
                        try
                        {
                            ddlCodpDestMerc.SelectedValue = pObjCliente.CodigoPostal;
                        }
                        catch { ddlCodpDestMerc.SelectedValue = string.Empty; }
                        txtTelDestMerc.Text = pObjCliente.Telefono;
                        //---
                        txtCodDestFact.Text = pObjCliente.Codigo;
                        txtNomDestFact.Text = pObjCliente.Descripcion;
                        txtDirDestFact.Text = pObjCliente.Direccion;
                        try
                        {
                            ddlCodpDestFact.SelectedValue = pObjCliente.CodigoPostal;
                        }
                        catch { ddlCodpDestFact.SelectedValue = string.Empty; }
                        txtTelDestFact.Text = pObjCliente.Telefono;
                        //---
                        txtCodResPago.Text = pObjCliente.Codigo;
                        txtNomResPago.Text = pObjCliente.Descripcion;
                        txtDirResPago.Text = pObjCliente.Direccion;
                        try
                        {
                            ddlCodpResPago.SelectedValue = pObjCliente.CodigoPostal;
                        }
                        catch { ddlCodpResPago.SelectedValue = string.Empty; }
                        txtTelResPago.Text = pObjCliente.Telefono;
                        txtNifResPago.Text = pObjCliente.Ruc;
                    }


                }
            }
        }

        private void buscarEncargadoComercial()
        {
            //rgutierrez 12.01.2012
            //txtNomVendedor1.Text = "";
            //txtCodVendedor1.Text = "";

            if (Session["Cliente"] != null && cmbCanalDist.SelectedIndex >= 0)
            {
                ClienteBE pObjCliente = (ClienteBE)Session["Cliente"];

                PersonaBE pObjPersona = ClienteBC.Instance.buscaVendedor(pObjCliente.Codigo, cmbOrgVtas.SelectedValue, cmbCanalDist.SelectedValue);
                if (pObjPersona != null)
                {
                    //pObjPersona = PersonaBC.Instance.leer(pObjPersona.CodPersona);
                    txtNomVendedor1.Text = pObjPersona.Descripcion;
                    txtCodVendedor1.Text = pObjPersona.CodPersona;
                }
            }
        }

        private void bloquearCliente(bool param)
        {
            txtCodCliente.ReadOnly = param;
            txtNomCliente.ReadOnly = param;
            aceNomCliente.Enabled = !param;

            txtCodSolicitante.ReadOnly = param;
            txtNomSolicitante.ReadOnly = param;
            aceNomSolicitante.Enabled = !param;
            txtDirSolicitante.ReadOnly = param;
            ddlCodpSolicitante.Enabled = !param;
            txtTelSolicitante.ReadOnly = param;
            txtNifSolicitante.ReadOnly = param;
        }

        protected void txtCodCliente_TextChanged(object sender, EventArgs e)
        {
            try
            {
                this.limpiarInterlocutores();
                this.limpiarClienteEventual();
                this.limpiarCliente();
                //cmbVendedor3.Enabled = false;

                if (!txtCodCliente.Text.Trim().Equals(""))
                {
                    _lvObjCliente = ClienteBC.Instance.leer(txtCodCliente.Text);
                    string tmpNomCli = _lvObjCliente == null ? "" : _lvObjCliente.Descripcion;
                    string tmpDirCli = _lvObjCliente == null ? "" : _lvObjCliente.DireccionCompleta;
                    string tmpRucCli = _lvObjCliente == null ? "" : _lvObjCliente.Ruc;

                    if (_lvObjCliente == null) { tmpNomCli = "...No se encontró el cliente..."; }

                    txtNomCliente.Text = tmpNomCli;
                    txtDirCliente.Text = tmpDirCli;

                    Session["Cliente"] = _lvObjCliente;

                    this.bloquearCliente(true);
                    //-- habilitar codigo de cliente
                    txtCodCliente.ReadOnly = false;
                }
                this.cargarInfoCliente();
                if (_lvObjCliente != null)
                {
                    this.cargarInterlocutores();
                    this.guardaInterlocutores();
                }
                this.guardaPedido();
                this.buscaPrecios();
            }
            catch (Exception ex)
            {
                string str = (Session["Mensaje"] != null ? Session["Mensaje"].ToString() : "");
                Session["Mensaje"] = string.IsNullOrEmpty(str) ? ex.Message : str + "\r\n" + ex.Message;
            }
        }

        protected void lnkAddItems_Click(object sender, EventArgs e)
        {
            try
            {
                if (Session["Cliente"] != null)
                {
                    Response.Redirect("Stock.aspx");
                }
                else
                {
                    Session["Mensaje"] = "Debe indicar el solicitante antes de añadir los materiales.";
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        private void cargarInfoCliente()
        {
            //cargar data de Organización de Ventas
            if (Session["Cliente"] != null)
            {
                ClienteBE pObjCliente = (ClienteBE)Session["Cliente"];
                
                List<GenericBE> lstOrgVtas = ClienteBC.Instance.listaOrgVtas(pObjCliente.Codigo);
                cmbOrgVtas.DataValueField = "Codigo";
                cmbOrgVtas.DataTextField = "Descripcion";
                cmbOrgVtas.DataSource = lstOrgVtas;
                cmbOrgVtas.DataBind();

                if (lstOrgVtas.Count > 0)
                {
                    List<GenericBE> lstCanalDist = ClienteBC.Instance.listaCanalDist(pObjCliente.Codigo, cmbOrgVtas.SelectedValue);
                    cmbCanalDist.DataValueField = "Codigo";
                    cmbCanalDist.DataTextField = "Descripcion";
                    cmbCanalDist.DataSource = lstCanalDist;
                    cmbCanalDist.DataBind();
                    if (cmbCanalDist.SelectedValue.Equals("10"))
                    {
                        try
                        {
                            cmbCondExp.SelectedValue = ParametroBC.Instance.getParamValue("LprioCanal10");
                        }
                        catch { }
                    }
                }
                else
                {
                    cmbCanalDist.DataValueField = "Codigo";
                    cmbCanalDist.DataTextField = "Descripcion";
                    cmbCanalDist.DataSource = new List<GenericBE>();
                    cmbCanalDist.DataBind();
                }

                //cargar cond pago y cond exp
                string pCondPago = "", pCondExp = "";
                ClienteBC.Instance.infoClienteNac(pObjCliente.Codigo, cmbOrgVtas.SelectedValue, cmbCanalDist.SelectedValue, gvSectorVal, out pCondPago, out pCondExp);
                //try
                //{ cmbCondExp.SelectedValue = pCondExp; }
                //catch (Exception ex) { Session["Mensaje"] = "Cond. exp asignada al cliente: " + pCondExp + " no existe.\r\n"; }
                try
                {
                    int i = 0;
                    for (; i < cmbCondicionesPago.Items.Count - 1; i++)
                    {
                        if (cmbCondicionesPago.Items[i].Value.Equals(pCondPago)) { break; }
                    }
                    cmbCondicionesPago.SelectedIndex = i;

                }
                catch //(Exception ex) 
                { Session["Mensaje"] = "Cond. pago asignada al cliente: " + pCondPago + " no existe.\r\n"; }
            }
            else //si no existe el cliente seleccionado:
            {
                cmbOrgVtas.DataValueField = "Codigo";
                cmbOrgVtas.DataTextField = "Descripcion";
                cmbOrgVtas.DataSource = new List<GenericBE>();
                cmbOrgVtas.DataBind();

                cmbCanalDist.DataValueField = "Codigo";
                cmbCanalDist.DataTextField = "Descripcion";
                cmbCanalDist.DataSource = new List<GenericBE>();
                cmbCanalDist.DataBind();

                cmbCondExp.SelectedValue = ParametroBC.Instance.getParamValue("CondExpDefault");
                cmbCondicionesPago.SelectedValue = "";
            }
            //cargar Encargado Comercial
            this.buscarEncargadoComercial();
            //this.guardaPedido();
        }

        protected void cmbOrgVtas_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (Session["Cliente"] != null && cmbOrgVtas.SelectedIndex >= 0)
            {
                ClienteBE pObjCliente = (ClienteBE)Session["Cliente"];
                List<GenericBE> lstCanalDist = ClienteBC.Instance.listaCanalDist(pObjCliente.Codigo, cmbOrgVtas.SelectedValue);

                cmbCanalDist.DataValueField = "Codigo";
                cmbCanalDist.DataTextField = "Descripcion";
                cmbCanalDist.DataSource = lstCanalDist;
                cmbCanalDist.DataBind();

                if (lstCanalDist.Count > 0)
                {
                    cmbCanalDist.SelectedIndex = 0;
                }
                if (cmbCanalDist.SelectedValue.Equals("10"))
                {
                    try
                    {
                        cmbCondExp.SelectedValue = ParametroBC.Instance.getParamValue("LprioCanal10");
                    }
                    catch { }
                }

                //--- volver a leer los materiales:
                PedidoBE objPedido = (PedidoBE)Session["Pedido"];
                foreach (DetalleBE objdet in objPedido.Detalle)
                {
                    objdet.Material = MaterialBC.Instance.leerMaterial(objdet.CodMaterial, cmbOrgVtas.SelectedValue, cmbCanalDist.SelectedValue);
                }
                Session["Pedido"] = objPedido;
            }
            else
            {
                cmbCanalDist.DataValueField = "Codigo";
                cmbCanalDist.DataTextField = "Descripcion";
                cmbCanalDist.DataSource = new List<GenericBE>();
                cmbCanalDist.DataBind();
            }
        }

        private void calculaFechaEntregaItem(DetalleBE objDetalle)
        {
            DateTime fechaCalculada, fechaActual = DateTime.Today;
            double factor = 0;
            //----

            //if (objDetalle.PrioridadEntrega == "04")//normal +2
            //{
            //    factor = 2;
            //}
            //else if (objDetalle.PrioridadEntrega == "01" || objDetalle.PrioridadEntrega == "02")//express +1
            //{
            //    factor = 1;
            //}
            if (ParametroBC.Instance.esTipoX(objDetalle.PrioridadEntrega, "CodPrioEntMas2"))
            {
                factor = 2;
            }
            else if (ParametroBC.Instance.esTipoX(objDetalle.PrioridadEntrega, "CodPrioEntMas1"))
            {
                factor = 1;
            }
            else
            {
                factor = 0;
            }
            //-----
            int count = Convert.ToInt32(factor);
            //Si es domingo pasa como si fuera lunes
            if (fechaActual.DayOfWeek == DayOfWeek.Sunday)
            {
                count += 1;
            }
            fechaCalculada = fechaActual;
            for (int i = 1; i <= count; i++)
            {
                if (((string)Session["Operacion"]).Equals("crear"))
                {
                    fechaCalculada = fechaCalculada.AddDays(1);
                    if (fechaCalculada.DayOfWeek == DayOfWeek.Sunday)
                    {
                        fechaCalculada = fechaCalculada.AddDays(1);
                    }
                }
            }

            //--- con una sola fecha de reparto:
            //if (fechaCalculada > objDetalle.FechaEntrega)
            //{
            //    objDetalle.FechaEntrega = fechaCalculada;
            //}
            //else if (objDetalle.FechaEntrega.DayOfWeek == DayOfWeek.Sunday)
            //{
            //    objDetalle.FechaEntrega = objDetalle.FechaEntrega.AddDays(1);
            //}

            //--- múltiples fechas de reparto:
            if (objDetalle.Repartos.Count == 0) { objDetalle.Repartos.Add(new RepartoBE()); }
            foreach (RepartoBE itmRep in objDetalle.Repartos)
            {
                if (fechaCalculada > itmRep.FechaEntrega && ((string)Session["Operacion"]).Equals("crear"))//mtejada
                {
                    itmRep.FechaEntrega = fechaCalculada;
                }
                else if (itmRep.FechaEntrega.DayOfWeek == DayOfWeek.Sunday)
                {
                    itmRep.FechaEntrega = itmRep.FechaEntrega.AddDays(1);
                }
            }
        }
        /// <summary>
        /// función para calcular la fecha de entrega en base a la prioridad de entrega
        /// </summary>
        /// <param name="pObjPedido">Datos del pedido</param>
        private void calculaFechaEntrega(PedidoBE pObjPedido)
        {
            foreach (DetalleBE objDetalle in pObjPedido.Detalle)
            {
                this.calculaFechaEntregaItem(objDetalle);
            }
        }

        private void buscaPrecios()
        {
            // valida q hayan datos necesarios
            if (!gvGrpVendVal.Equals(string.Empty) && cmbOficina.SelectedIndex >= 0 &&
                cmbTipoDocumento.SelectedIndex >= 0 && 
                cmbOrgVtas.SelectedIndex >= 0 && cmbCanalDist.SelectedIndex >= 0 &&
                !txtCodCliente.Text.Trim().Equals(""))
            {
                this._lvObjPedido = (PedidoBE)Session["Pedido"];

                //@rgutierrez 09.11.2011
                PedidoBC objPBC = PedidoBC.Instance;
                if (hidDescuentoTotal.Value != "")
                {
                    objPBC.DescuentoTotal = Convert.ToDecimal(hidDescuentoTotal.Value);
                }
                string retMsg = objPBC.cargarCondiciones(ref this._lvObjPedido);
                //string retMsg = PedidoBC.Instance.cargarCondiciones(ref this._lvObjPedido);

                //foreach (DetalleBE d in _lvObjPedido.Detalle)
                //{
                //    d.DctoDecorPorcAux = d.DctoDecorPorc;
                //}
                Session["Pedido"] = this._lvObjPedido;

                if (retMsg != string.Empty)
                {
                    Session["Mensaje"] = retMsg;
                }
                else
                {
                    this.cargaPedido();
                }
            }
        }

        #region Botones
        //modificado
        private string addItem(string pCodMat, decimal pCant)
        {
            string retMsg = "";

            try
            {
                this._lvObjPedido = (PedidoBE)Session["Pedido"];
                List<DetalleBE> lstMateriales = (this._lvObjPedido.Detalle == null) ? new List<DetalleBE>() : this._lvObjPedido.Detalle;

                DetalleBE objDetalle = new DetalleBE();
                objDetalle.CodMaterial = pCodMat;
                objDetalle.Cantidad = pCant;
                
                MaterialBE objMaterial = MaterialBC.Instance.leerMaterial(objDetalle.CodMaterial, this._lvObjPedido.OrgVentas, this._lvObjPedido.CanalDist);

                if (objMaterial != null)
                {
                    //@rgutierrez 09.11.2011
                    //objDetalle.DctoGenericoZD08.Importe = _lvObjPedido.Detalle[0].DctoGenericoZD08.Importe;
                    //objDetalle.DctoGenericoZD08.Valor = Math.Round(_lvObjPedido.Detalle[0].DctoGenericoZD08.Importe * pCant * objMaterial.PrecioUnit / 1000,2);

                    objDetalle.DescMaterial = objMaterial.DescMaterial;
                    objDetalle.CodUMedida = objMaterial.CodUMedida;
                    objDetalle.Peso = objMaterial.Peso;
                    objDetalle.UMedidaRendimiendo = objMaterial.UMedidaRendimiendo;
                    objDetalle.ValorRendimiento = objMaterial.ValorRendimiento;
                    objDetalle.TipoMaterial = objMaterial.TipoMaterial;

                    objDetalle.Material = objMaterial;

                    //si UM = UNidad => redondear al entero mayor
                    if (ParametroBC.Instance.esTipoX(objDetalle.CodUMedida, "UMUnidad"))
                    {
                        objDetalle.Cantidad = (objDetalle.Cantidad > decimal.Truncate(objDetalle.Cantidad)) ? decimal.Truncate(objDetalle.Cantidad) + 1 : objDetalle.Cantidad;
                    }
                    //--- calcular rendimiento
                    if (!ParametroBC.Instance.esTipoX(objDetalle.Material.Tipo, "TipoMatServicio") &&
                        ParametroBC.Instance.esTipoX(objDetalle.Material.UMedidaRendimiendo, "UMRendimiento"))
                    {
                        objDetalle.Cantidad = PedidoBC.Instance.calculaRendimiento(objDetalle.Cantidad, objDetalle.ValorRendimiento); //rgutierrez 15.11.2011
                        //objDetalle.Cantidad = this.calculaRendimiento(objDetalle.Cantidad, objDetalle.ValorRendimiento);
                    }

                    bool auxC = false;
                    //--- cargar data de prioridad de entrega en base a la cond de exp.
                    if (!string.IsNullOrEmpty(this._lvObjPedido.CondExp) && !cmbTipoDocumento.SelectedValue.Equals("Z037"))
                    {
                        objDetalle.PrioridadEntrega = this._lvObjPedido.CondExp;
                        auxC = true;

                    }
                    /*20110714 Inicio WCA  */
                    string canalesCondDesNor = ParametroBC.Instance.getParamValue("CondPriorDespNormal");
                    if (!string.IsNullOrEmpty(canalesCondDesNor))
                    {
                        string[] aCanalCond = canalesCondDesNor.Split(',');
                        for (int iCan = 0; iCan < aCanalCond.Length; iCan++)
                        {
                            if (aCanalCond[iCan].Equals(this.cmbCanalDist.SelectedValue))
                            {
                                objDetalle.PrioridadEntrega = ParametroBC.Instance.getParamValue("PriorDetReparto");
                                break;
                            }
                        }

                    }
                    /*20110714 Fin  */
                    //--- cargar fecha de entrega
                    if (this._lvObjPedido.FechaEntrega != objDetalle.Repartos[0].FechaEntrega)
                    {
                        objDetalle.Repartos[0].FechaEntrega = this._lvObjPedido.FechaEntrega;
                        auxC = true;
                    }
                    if (auxC) { this.calculaFechaEntregaItem(objDetalle); }
                    objDetalle.Repartos[0].CantPed = objDetalle.Cantidad;
                    objDetalle.Repartos[0].CantConf = objDetalle.Cantidad;
                    //--- cálculo de posición
                    string tmpPos = "";
                    if (lstMateriales.Count > 0)
                    {
                        tmpPos = lstMateriales[lstMateriales.Count - 1].Posicion;
                    }
                    else
                    {
                        tmpPos = "00";
                    }
                    int posi = Convert.ToInt16(tmpPos) + 10;
                    Session["ultimaPosAdd"] = posi;
                    objDetalle.Posicion = posi.ToString();

                    lstMateriales.Add(objDetalle);

                    //--- validar si es un material Z004/Z001 combo/kit
                    if (ParametroBC.Instance.esTipoX(objMaterial.Tipo, "TipoMatCombo") && 
                        (((List<EnlaceMaterialBE>)Session["ObjEnla"]).Count == 0))
                    {
                        //buscar materiales asociados y añadirlos
                        string pTipoPos = ""; 
                        
                        List<DetalleBE> lstDetalle = PedidoBC.Instance.buscaTipoPosicion(this._lvObjPedido.CodTipoDoc, objMaterial.CodMaterial, this._lvObjPedido.OrgVentas,
                                          this._lvObjPedido.CanalDist, out pTipoPos);
                        objDetalle.TipoPosicion = pTipoPos.Equals("") ? objDetalle.TipoPosicion : pTipoPos;
                    
                        //--- si tiene elementos, entonces es un KIT o Combo
                        foreach (DetalleBE item in lstDetalle)
                        {
                            item.DescMaterial = item.Material.DescMaterial;
                            item.CodUMedida = item.Material.CodUMedida;
                            item.Peso = item.Material.Peso;
                            item.UMedidaRendimiendo = item.Material.UMedidaRendimiendo;
                            item.ValorRendimiento = item.Material.ValorRendimiento;
                            item.TipoMaterial = item.Material.TipoMaterial;

                            posi += 10;
                            item.Posicion = posi.ToString();
                            item.PosSup = objDetalle.Posicion;

                            item.Cantidad = item.CantComp * objDetalle.Cantidad;
                            //si UM = UNidad => redondear al entero mayor
                            if (ParametroBC.Instance.esTipoX(item.CodUMedida, "UMUnidad"))
                            {
                                item.Cantidad = (item.Cantidad > decimal.Truncate(item.Cantidad)) ? decimal.Truncate(item.Cantidad) + 1 : item.Cantidad;
                            }
                            //--------------------
                            if (item.Material == null)
                            {
                                item.Material = MaterialBC.Instance.leerMaterial(item.CodMaterial, this._lvObjPedido.OrgVentas, this._lvObjPedido.CanalDist);
                            }
                            //--- calcular rendimiento
                            if (!ParametroBC.Instance.esTipoX(item.Material.Tipo, "TipoMatServicio") &&
                                ParametroBC.Instance.esTipoX(item.Material.UMedidaRendimiendo, "UMRendimiento"))
                            {
                                item.Cantidad = PedidoBC.Instance.calculaRendimiento(item.Cantidad, item.ValorRendimiento); //rgutierrez 15.11.2011
                                //item.Cantidad = this.calculaRendimiento(item.Cantidad, item.ValorRendimiento);
                            }
                            if (this._lvObjPedido.CodTipoDoc != "Z034")
                            {
                                switch (objDetalle.TipoPosicion)
                                {
                                    case "Z011":
                                        item.TipoPosicion = "Z012";
                                        break;
                                    case "Z016":
                                        item.TipoPosicion = "Z017";
                                        break;
                                    case "Z007":
                                        item.TipoPosicion = "Z008";
                                        break;
                                    case "Z014":
                                        item.TipoPosicion = "Z015";
                                        break;
                                }
                            }
                            auxC = false;
                            //--- cargar data de prioridad de entrega en base a la cond de exp.
                            if (!string.IsNullOrEmpty(this._lvObjPedido.CondExp))
                            {
                                item.PrioridadEntrega = this._lvObjPedido.CondExp;
                                auxC = true;
                            }
                            /*20110714 Inicio WCA  */
                            if (!string.IsNullOrEmpty(canalesCondDesNor))
                            {
                                string[] aCanalCond = canalesCondDesNor.Split(',');
                                for (int iCan = 0; iCan < aCanalCond.Length; iCan++)
                                {
                                    if (aCanalCond[iCan].Equals(this.cmbCanalDist.SelectedValue))
                                    {
                                        item.PrioridadEntrega = ParametroBC.Instance.getParamValue("PriorDetReparto");
                                        break;
                                    }
                                }

                            }
                            /*20110714 Fin  */

                            //--- cargar fecha de entrega
                            if (this._lvObjPedido.FechaEntrega != objDetalle.Repartos[0].FechaEntrega)
                            {
                                objDetalle.Repartos[0].FechaEntrega = this._lvObjPedido.FechaEntrega;
                                auxC = true;
                            }
                            if (auxC) { this.calculaFechaEntregaItem(item); }
                            objDetalle.Repartos[0].CantPed = item.Cantidad;
                            objDetalle.Repartos[0].CantConf = item.Cantidad;
                            //--- solo agregar los q no hayan sido agregados antes
                            lstMateriales.Add(item);
                        }
                    }
                    this._lvObjPedido.Detalle = lstMateriales;
                    Session["Pedido"] = this._lvObjPedido;


                }
                else
                {
                    retMsg = "No se encontró el material.";
                }
            }
            catch (Exception ex)
            {
                retMsg = ex.Message;
            }
            return retMsg;
        }
//------------------------------------
        //mtejada:14.03.2013
        private void llenaDataAdic(EnlaceMaterialBE pObjEnla)
        {
            //gvMatAdic.DataSource = pObjEnla;
            //gvStock.DataBind();
            
        }

        private string addItemAdic(EnlaceMaterialBE pObjEnla)
        {
            string retMsg = "";

            try
            {
                //this._lvObjPedido = (PedidoBE)Session["Pedido"];
                //List<DetalleBE> lstMateriales = (this._lvObjPedido.Detalle == null) ? new List<DetalleBE>() : this._lvObjPedido.Detalle;

                //DetalleBE objDetalle = new DetalleBE();
                //objDetalle.CodMaterial = pCodMat;
                //objDetalle.Cantidad = pCant;

                //MaterialBE objMaterial = MaterialBC.Instance.leerMaterial(objDetalle.CodMaterial, this._lvObjPedido.OrgVentas, this._lvObjPedido.CanalDist);

                //if (objMaterial != null)
                //{
                //    //@rgutierrez 09.11.2011
                //    //objDetalle.DctoGenericoZD08.Importe = _lvObjPedido.Detalle[0].DctoGenericoZD08.Importe;
                //    //objDetalle.DctoGenericoZD08.Valor = Math.Round(_lvObjPedido.Detalle[0].DctoGenericoZD08.Importe * pCant * objMaterial.PrecioUnit / 1000,2);

                //    objDetalle.DescMaterial = objMaterial.DescMaterial;
                //    objDetalle.CodUMedida = objMaterial.CodUMedida;
                //    objDetalle.Peso = objMaterial.Peso;
                //    objDetalle.UMedidaRendimiendo = objMaterial.UMedidaRendimiendo;
                //    objDetalle.ValorRendimiento = objMaterial.ValorRendimiento;
                //    objDetalle.TipoMaterial = objMaterial.TipoMaterial;

                //    objDetalle.Material = objMaterial;

                //    //si UM = UNidad => redondear al entero mayor
                //    if (ParametroBC.Instance.esTipoX(objDetalle.CodUMedida, "UMUnidad"))
                //    {
                //        objDetalle.Cantidad = (objDetalle.Cantidad > decimal.Truncate(objDetalle.Cantidad)) ? decimal.Truncate(objDetalle.Cantidad) + 1 : objDetalle.Cantidad;
                //    }
                //    //--- calcular rendimiento
                //    if (!ParametroBC.Instance.esTipoX(objDetalle.Material.Tipo, "TipoMatServicio") &&
                //        ParametroBC.Instance.esTipoX(objDetalle.Material.UMedidaRendimiendo, "UMRendimiento"))
                //    {
                //        objDetalle.Cantidad = PedidoBC.Instance.calculaRendimiento(objDetalle.Cantidad, objDetalle.ValorRendimiento); //rgutierrez 15.11.2011
                //        //objDetalle.Cantidad = this.calculaRendimiento(objDetalle.Cantidad, objDetalle.ValorRendimiento);
                //    }

                //    bool auxC = false;
                //    //--- cargar data de prioridad de entrega en base a la cond de exp.
                //    if (!string.IsNullOrEmpty(this._lvObjPedido.CondExp) && !cmbTipoDocumento.SelectedValue.Equals("Z037"))
                //    {
                //        objDetalle.PrioridadEntrega = this._lvObjPedido.CondExp;
                //        auxC = true;

                //    }
                //    /*20110714 Inicio WCA  */
                //    string canalesCondDesNor = ParametroBC.Instance.getParamValue("CondPriorDespNormal");
                //    if (!string.IsNullOrEmpty(canalesCondDesNor))
                //    {
                //        string[] aCanalCond = canalesCondDesNor.Split(',');
                //        for (int iCan = 0; iCan < aCanalCond.Length; iCan++)
                //        {
                //            if (aCanalCond[iCan].Equals(this.cmbCanalDist.SelectedValue))
                //            {
                //                objDetalle.PrioridadEntrega = ParametroBC.Instance.getParamValue("PriorDetReparto");
                //                break;
                //            }
                //        }

                //    }
                //    /*20110714 Fin  */
                //    //--- cargar fecha de entrega
                //    if (this._lvObjPedido.FechaEntrega != objDetalle.Repartos[0].FechaEntrega)
                //    {
                //        objDetalle.Repartos[0].FechaEntrega = this._lvObjPedido.FechaEntrega;
                //        auxC = true;
                //    }
                //    if (auxC) { this.calculaFechaEntregaItem(objDetalle); }
                //    objDetalle.Repartos[0].CantPed = objDetalle.Cantidad;
                //    objDetalle.Repartos[0].CantConf = objDetalle.Cantidad;
                //    //--- cálculo de posición
                //    string tmpPos = "";
                //    if (lstMateriales.Count > 0)
                //    {
                //        tmpPos = lstMateriales[lstMateriales.Count - 1].Posicion;
                //    }
                //    else
                //    {
                //        tmpPos = "00";
                //    }
                //    int posi = Convert.ToInt16(tmpPos) + 10;
                //    Session["ultimaPosAdd"] = posi;
                //    objDetalle.Posicion = posi.ToString();

                //    lstMateriales.Add(objDetalle);

                //    //--- validar si es un material Z004/Z001 combo/kit
                //    if (ParametroBC.Instance.esTipoX(objMaterial.Tipo, "TipoMatCombo"))
                //    {
                //        //buscar materiales asociados y añadirlos
                //        string pTipoPos = "";

                //        List<DetalleBE> lstDetalle = PedidoBC.Instance.buscaTipoPosicion(this._lvObjPedido.CodTipoDoc, objMaterial.CodMaterial, this._lvObjPedido.OrgVentas,
                //                          this._lvObjPedido.CanalDist, out pTipoPos);
                //        objDetalle.TipoPosicion = pTipoPos.Equals("") ? objDetalle.TipoPosicion : pTipoPos;

                //        //--- si tiene elementos, entonces es un KIT o Combo
                //        foreach (DetalleBE item in lstDetalle)
                //        {
                //            item.DescMaterial = item.Material.DescMaterial;
                //            item.CodUMedida = item.Material.CodUMedida;
                //            item.Peso = item.Material.Peso;
                //            item.UMedidaRendimiendo = item.Material.UMedidaRendimiendo;
                //            item.ValorRendimiento = item.Material.ValorRendimiento;
                //            item.TipoMaterial = item.Material.TipoMaterial;

                //            posi += 10;
                //            item.Posicion = posi.ToString();
                //            item.PosSup = objDetalle.Posicion;

                //            item.Cantidad = item.CantComp * objDetalle.Cantidad;
                //            //si UM = UNidad => redondear al entero mayor
                //            if (ParametroBC.Instance.esTipoX(item.CodUMedida, "UMUnidad"))
                //            {
                //                item.Cantidad = (item.Cantidad > decimal.Truncate(item.Cantidad)) ? decimal.Truncate(item.Cantidad) + 1 : item.Cantidad;
                //            }
                //            //--------------------
                //            if (item.Material == null)
                //            {
                //                item.Material = MaterialBC.Instance.leerMaterial(item.CodMaterial, this._lvObjPedido.OrgVentas, this._lvObjPedido.CanalDist);
                //            }
                //            //--- calcular rendimiento
                //            if (!ParametroBC.Instance.esTipoX(item.Material.Tipo, "TipoMatServicio") &&
                //                ParametroBC.Instance.esTipoX(item.Material.UMedidaRendimiendo, "UMRendimiento"))
                //            {
                //                item.Cantidad = PedidoBC.Instance.calculaRendimiento(item.Cantidad, item.ValorRendimiento); //rgutierrez 15.11.2011
                //                //item.Cantidad = this.calculaRendimiento(item.Cantidad, item.ValorRendimiento);
                //            }
                //            if (this._lvObjPedido.CodTipoDoc != "Z034")
                //            {
                //                switch (objDetalle.TipoPosicion)
                //                {
                //                    case "Z011":
                //                        item.TipoPosicion = "Z012";
                //                        break;
                //                    case "Z016":
                //                        item.TipoPosicion = "Z017";
                //                        break;
                //                    case "Z007":
                //                        item.TipoPosicion = "Z008";
                //                        break;
                //                    case "Z014":
                //                        item.TipoPosicion = "Z015";
                //                        break;
                //                }
                //            }
                //            auxC = false;
                //            //--- cargar data de prioridad de entrega en base a la cond de exp.
                //            if (!string.IsNullOrEmpty(this._lvObjPedido.CondExp))
                //            {
                //                item.PrioridadEntrega = this._lvObjPedido.CondExp;
                //                auxC = true;
                //            }
                //            /*20110714 Inicio WCA  */
                //            if (!string.IsNullOrEmpty(canalesCondDesNor))
                //            {
                //                string[] aCanalCond = canalesCondDesNor.Split(',');
                //                for (int iCan = 0; iCan < aCanalCond.Length; iCan++)
                //                {
                //                    if (aCanalCond[iCan].Equals(this.cmbCanalDist.SelectedValue))
                //                    {
                //                        item.PrioridadEntrega = ParametroBC.Instance.getParamValue("PriorDetReparto");
                //                        break;
                //                    }
                //                }

                //            }
                //            /*20110714 Fin  */

                //            //--- cargar fecha de entrega
                //            if (this._lvObjPedido.FechaEntrega != objDetalle.Repartos[0].FechaEntrega)
                //            {
                //                objDetalle.Repartos[0].FechaEntrega = this._lvObjPedido.FechaEntrega;
                //                auxC = true;
                //            }
                //            if (auxC) { this.calculaFechaEntregaItem(item); }
                //            objDetalle.Repartos[0].CantPed = item.Cantidad;
                //            objDetalle.Repartos[0].CantConf = item.Cantidad;
                //            //--- solo agregar los q no hayan sido agregados antes
                //            lstMateriales.Add(item);
                //        }
                //    }
                //    this._lvObjPedido.Detalle = lstMateriales;
                //    Session["Pedido"] = this._lvObjPedido;
                //}
                //else
                //{
                //    retMsg = "No se encontró el material.";
                //}
            }
            catch (Exception ex)
            {
                retMsg = ex.Message;
            }
            return retMsg;
        }
//----------------------------------------
        protected void ibtnAddNuevoMat_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                if (Session["Cliente"] == null)
                {
                    Session["Mensaje"] = "Debe indicar el solicitante antes de añadir los materiales.";
                }
                else
                {
                    txtCantNuevoMat.Text = txtCantNuevoMat.Text.Trim().Equals("") ? "0.000" : txtCantNuevoMat.Text.Trim();
                    decimal cant = Convert.ToDecimal(txtCantNuevoMat.Text);

                    //mtejada:14.03.2013:EF M204 SUB-PROCESO DE CONTRATA
                    //buscamos verificamos si es de sub-contrata
                    string retVal = "";
                    List<EnlaceMaterialBE> lstEMat = MaterialBC.Instance.buscarMaterialesAdicionales(txtCodNuevoMat.Text.Trim(), "");
                    Session["ObjEnla"] = lstEMat;
                    if (lstEMat.Count > 0 && !ParametroBC.Instance.esTipoOferta(cmbTipoDocumento.SelectedValue))
                    {

                        //this.llenaDataAdic(lstEMat);
                        Session["pagAnt"] = "DocVenta.aspx";
                        Response.Redirect("MatSubcontrata.aspx");
                    }
                    else
                    {
                        retVal = this.addItem(txtCodNuevoMat.Text.Trim(), cant);
                    }
                    if (retVal.Equals(""))
                    {
                        //this._lvObjPedido = (PedidoBE)Session["Pedido"];
                        this.buscaPrecios();
                    }
                    else
                    {
                        //mensaje de error
                        Session["Mensaje"] = retVal;
                    }
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        //rgutierrez 06.12.2011
        protected void ibtnCloseDctoTotal_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                this._lvObjPedido = (PedidoBE)Session["Pedido"];

                ImageButton ibtnCloseDctoTotal = (ImageButton)sender;
                Panel pnlDctoTotal = (Panel)ibtnCloseDctoTotal.Parent;
                DataControlFieldCell dli = (DataControlFieldCell)pnlDctoTotal.Parent;
                HiddenField hidPosicion = (HiddenField)dli.FindControl("hidPosicion");
                ModalPopupExtender mpeDctoTotal = (ModalPopupExtender)dli.FindControl("mpeDctoTotal");

                string posActual = hidPosicion.Value.PadLeft(6, '0');
                List<DetalleBE> lstDetalle = new List<DetalleBE>();
                if (this._lvObjPedido != null)
                {
                    lstDetalle = this._lvObjPedido.Detalle;
                }
                DetalleBE objItem = lstDetalle.Find(delegate(DetalleBE obj) { return obj.Posicion == posActual; });

                #region guardar descuentos
                HtmlTable tblDescuentos = (HtmlTable)pnlDctoTotal.FindControl("tblDescuentos");
                HiddenField hidClaseCondicion;
                TextBox txtImporte;
                string varHidClaseCondicion;
                string varTxtImporte;
                for (int i = 0; i < tblDescuentos.Rows.Count; i++)
			    {
                    varHidClaseCondicion = "hidClaseCondicion" + i.ToString();
                    varTxtImporte = "txtImporte" + i.ToString();

                    hidClaseCondicion = (HiddenField)tblDescuentos.FindControl(varHidClaseCondicion);
                    txtImporte = (TextBox)tblDescuentos.FindControl(varTxtImporte);
                    if (txtImporte.Text.Trim() == "")
                    {
                        txtImporte.Text = "0";
                    }

                    if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondDctoDecorPorc"))
                    {
                        objItem.DctoDecorPorc.Importe = Convert.ToDecimal(txtImporte.Text);
                    }
                    else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondDctoAdicionalPorc"))
                    {
                        objItem.DctoAdicionalPorc.Importe = Convert.ToDecimal(txtImporte.Text);
                    }
                    else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondDctoEstadisticoPorc"))
                    {
                        objItem.DctoEstadisticoPorc.Importe = Convert.ToDecimal(txtImporte.Text);
                    }
                    else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondDctoGerenciaPorc"))
                    {
                        objItem.DctoGerenciaPorc.Importe = Convert.ToDecimal(txtImporte.Text);
                    }
                    else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondDctoGerenciaMonto"))
                    {
                        objItem.DctoGerenciaMonto.Importe = Convert.ToDecimal(txtImporte.Text);
                    }
                    else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondZD06"))
                    {
                        objItem.DctoZD06.Importe = Convert.ToDecimal(txtImporte.Text);
                    }
                    else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondDctos"))
                    {
                        objItem.DctoGenerico.Importe = Convert.ToDecimal(txtImporte.Text);
                    }
                    else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondZD11"))
                    {
                        objItem.DctoZD11.Importe = Convert.ToDecimal(txtImporte.Text);
                    }
                }
                #endregion

                Session["Pedido"] = this._lvObjPedido;
                mpeDctoTotal.Hide();
                upMain.Update();
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        protected void ibtnCloseReparto_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                this._lvObjPedido = (PedidoBE)Session["Pedido"];

                ImageButton ibtnCloseReparto = (ImageButton)sender;
                Panel pnlReparto = (Panel)ibtnCloseReparto.Parent.Parent.Parent;
                DataControlFieldCell dli = (DataControlFieldCell)pnlReparto.Parent;
                //DataListItem dli = (DataListItem)pnlReparto.Parent;
                DropDownList cmbPrioridadEnt = (DropDownList)pnlReparto.FindControl("cmbPrioridadEnt");

                HiddenField hidPosicion = (HiddenField)dli.FindControl("hidPosicion");
                LinkButton lnkReparto = (LinkButton)dli.FindControl("lnkReparto");
                ModalPopupExtender mpeReparto = (ModalPopupExtender)dli.FindControl("mpeReparto");

                string posActual = hidPosicion.Value.PadLeft(6, '0');
                List<DetalleBE> lstDetalle = new List<DetalleBE>();
                if (this._lvObjPedido != null)
                {
                    lstDetalle = this._lvObjPedido.Detalle;
                }
                DetalleBE objItem = lstDetalle.Find(delegate(DetalleBE obj) { return obj.Posicion == posActual; });

                //--- guardar repartos
                #region guardar repartos
                int repCount = Convert.ToInt16(ParametroBC.Instance.getParamValue("RepartoCount"));
                HtmlTable tblRepartos = (HtmlTable)pnlReparto.FindControl("tblRepartos");

                TextBox txtFechaEnt, txtCantPed; Label lblCantConf;
                DateTime fechaMayor = DateTime.Today;
                decimal cantTotal = 0m;
                for (int i = 1; i <= repCount; i++)
                {
                    string varTxtFechaEntrega = "txtFechaEntrega" + i.ToString();
                    string varLblCantConf = "lblCantConf" + i.ToString();
                    string varTxtCantPed = "txtCantPed" + i.ToString();

                    txtFechaEnt = (TextBox)tblRepartos.FindControl(varTxtFechaEntrega);
                    txtCantPed = (TextBox)tblRepartos.FindControl(varTxtCantPed);
                    lblCantConf = (Label)tblRepartos.FindControl(varLblCantConf);
                    txtCantPed.Text = txtCantPed.Text == "" ? "0" : txtCantPed.Text;

                    //--- asignar valor de pedido
                    if (!txtFechaEnt.Text.Equals("") && (Convert.ToDecimal(txtCantPed.Text) > 0m || Convert.ToDecimal(lblCantConf.Text) > 0m))
                    {
                        if (objItem.Repartos.Count < i)
                        {
                            for (int j = objItem.Repartos.Count; j <= i - 1; j++)
                            {
                                objItem.Repartos.Add(new RepartoBE());
                            }
                        }
                        objItem.Repartos[i - 1].CantPed = Convert.ToDecimal(txtCantPed.Text);
                        lblCantConf.Text = lblCantConf.Text.Equals(string.Empty) ? "0.00" : lblCantConf.Text;
                        objItem.Repartos[i - 1].CantConf = Convert.ToDecimal(lblCantConf.Text) == 0m ? Convert.ToDecimal(txtCantPed.Text) : Convert.ToDecimal(lblCantConf.Text);
                        objItem.Repartos[i - 1].FechaEntrega = Convert.ToDateTime(txtFechaEnt.Text);

                        cantTotal += objItem.Repartos[i - 1].CantPed;

                        //--- valida fecha ingresada mayor a fecha actual
                        if (objItem.Repartos[i - 1].FechaEntrega < DateTime.Today && ((string)Session["Operacion"]).Equals("crear"))//mtejada
                        {
                            throw new Exception(string.Format(ParametroBC.Instance.getParamValue("msgFechaInvalida"), i));
                        }
                        if (objItem.Repartos[i - 1].FechaEntrega <= fechaMayor && i > 1 && ((string)Session["Operacion"]).Equals("crear"))
                        {
                            throw new Exception(string.Format(ParametroBC.Instance.getParamValue("msgFechaMayor"), i, i - 1));
                        }
                        fechaMayor = objItem.Repartos[i - 1].FechaEntrega;
                    }
                    else
                    {
                        if (objItem.Repartos.Count >= i)
                        {
                            objItem.Repartos[i - 1].CantPed = 0m;
                            objItem.Repartos[i - 1].CantConf = 0m;
                        }
                    }
                }
                List<RepartoBE> lstRepAux = new List<RepartoBE>();
                int posRep = 1;
                foreach (RepartoBE itmRep in objItem.Repartos)
                {
                    if (itmRep.CantPed > 0m || itmRep.CantConf > 0m)
                    {
                        itmRep.Pos = posRep.ToString(); 
                        lstRepAux.Add(itmRep); 
                        posRep++;
                    }
                }
                objItem.Repartos = lstRepAux;
                #endregion
                //--------------------
                if (cantTotal != objItem.Cantidad)
                {
                    throw new Exception(string.Format(ParametroBC.Instance.getParamValue("msgCantPedCantConf"), objItem.Posicion));
                }

                objItem.PrioridadEntrega = cmbPrioridadEnt.SelectedValue;
                this.calculaFechaEntregaItem(objItem);
                lnkReparto.Text = objItem.PrioridadEntrega + " " + objItem.Repartos[0].FechaEntrega.ToString("dd/MM/yy");

                Session["Pedido"] = this._lvObjPedido;
                mpeReparto.Hide();
                upMain.Update();
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        protected void btnGrabar_Click(object sender, ImageClickEventArgs e)
        {
            bool pedConMatServ = false;
            bool pasa= true;
            string strMsg = "";
            string coma = "";
            bool tienetipo = true;

            if (txtCodVersion.Text.Length > 4)
            {
                pasa = false;
                Session["Mensaje"] = "El campo Cod Version no debe pasar de 4 digitos";

            }
            else
            {

                for (int x = 0; x <= txtCodVersion.Text.Length - 1; x++)
                {
                    if (!char.IsDigit(txtCodVersion.Text[x]))
                    {
                        pasa = false;
                        Session["Mensaje"] = "El campo Cod Version debe ser numerico";
                    }
                }

                //validacion percepciones
                //this._lvObjPedido = (PedidoBE)Session["Pedido"];

                //int cant_mat = _lvObjPedido.Detalle.Count;
                //int cant_mat_noperc = 0;
                //int cant_mat_perc = 0;

                //string mensaje_perc = "Pos. Materiales sujetos a Percepción: ";
                //string mensaje_no_perc = "Pos. Materiales NO sujetos a Percepcion: ";
                //string band_perc = "";
                //string band_no_perc = "";


                //foreach (DetalleBE deta_per in _lvObjPedido.Detalle)
                //{
                  //  if (deta_per.TotPercep > 0)
                   // {
                     //   mensaje_perc = mensaje_perc + deta_per.Posicion + " ";
                      //  band_perc = "X";
                       // cant_mat_perc += 1;
                    //}
                    //else
                    //{
                      //  mensaje_no_perc = mensaje_no_perc + deta_per.Posicion + " ";
                       // band_no_perc = "X";
                        //cant_mat_noperc += 1;

                    //}

                //}

                //string mensaje_alerta_mat = "Solo debe seleccionar materiales de un solo tipo ";
                
               // if (cant_mat_perc != 0 && cant_mat_noperc != 0) {
                 //   if (band_perc == "X" && band_no_perc == "")
                  //  {
                    //    mensaje_alerta_mat = mensaje_alerta_mat + mensaje_perc;
                    //}
                    //else if (band_perc == "" && band_no_perc == "X")
                    //{
                     //   mensaje_alerta_mat = mensaje_alerta_mat + mensaje_no_perc;
                    //}
                    //else if (band_perc == "X" && band_no_perc == "X")
                   // {
                    //    mensaje_alerta_mat = mensaje_alerta_mat + mensaje_perc + mensaje_no_perc;
                   // }
                    //Session["Mensaje"] = mensaje_alerta_mat;
                   // pasa = false;
                //}
                //validacion percepciones

               



            }

           if (ParametroBC.Instance.esTipoOferta(cmbTipoDocumento.SelectedValue) && (txtCorreo.Text.Equals("")) && (!cmbTipoDocumento.SelectedValue.Equals("Z004"))) 
           { 
                pasa = false;
                Session["Mensaje"] = ParametroBC.Instance.getParamValue("msgErrCorreo");
           }
            if ( ( cmbTipoDocumento.SelectedValue.Equals("Z036") || cmbTipoDocumento.SelectedValue.Equals("Z037") )&&
                 (((cmbTipoVisita.SelectedValue.Equals("") || txtTextDescVisita.Text.Equals("") ) && cmbTipoDocumento.SelectedValue.Equals("Z036")) ||
                 ( txtTextoContactoVisita.Text.Equals("") || txtTextTelefonosVisita.Text.Equals("") ||
                   txtTextoRefDireccion.Text.Equals("") )
                   //|| (cmbTipoDocumento.SelectedValue.Equals("Z037") && txtTextDescInstala.Text.Equals(""))
                   )
                )
            {
                
                if (cmbTipoVisita.SelectedValue.Equals("") && cmbTipoDocumento.SelectedValue.Equals("Z036"))
                {
                    pasa = false;
                    tienetipo = false;
                }
                //Contacto, Teléfono,	Referencia de dirección, Descripción de la visita.
                if (txtTextoContactoVisita.Text.Equals(""))
                   {
                      if (!strMsg.Equals("")) coma = ", ";
                         strMsg = "Contacto";
                   }
                if (txtTextTelefonosVisita.Text.Equals(""))
                   {
                      if (!strMsg.Equals("")) coma = ", ";
                         strMsg = strMsg + coma + "Teléfono ";
                         coma = "";
                   }
                if (cmbTipoDocumento.SelectedValue.Equals("Z036")) //mtejada 21.11.2011
                   {
                      if (txtTextDescVisita.Text.Equals(""))
                        {
                           if (!strMsg.Equals("")) coma = ", ";
                              strMsg = strMsg + coma + "Descripción de la visita";
                              coma = "";
                        }
                    }
                if (txtTextoRefDireccion.Text.Equals(""))
                   {
                     if (!strMsg.Equals("")) coma = ", ";
                         strMsg = strMsg + coma + "Referencia de dirección ";
                         coma = "";
                   }
                    Session["Mensaje"] = "";
                    if (!strMsg.Equals("") || !tienetipo ) 
                    {
                        pasa = false;
                        Session["Mensaje"] = ParametroBC.Instance.getParamValue("msgErrVisitaTextos1") + strMsg;
                        if (!tienetipo && !strMsg.Equals(""))
                        {
                            Session["Mensaje"] = ParametroBC.Instance.getParamValue("msgErrVisitaTextos2") + " " + Session["Mensaje"];
                        }
                        else if (!tienetipo && strMsg.Equals(""))
                        {
                            Session["Mensaje"] = ParametroBC.Instance.getParamValue("msgErrVisitaTextos2");
                        }
                    }
    
            }

            if (pasa)
            {
                if (!((string)Session["Operacion"]).Equals("editar"))
                    if (!documentoValido())
                    {
                        upBotones.Update();
                        upMain.Update();
                        ((Site)Master).muestraMensajes();
                        return;
                    }

                string error9160 = "";
                //--validar rendimiento antes de grabar
                if (cmbTipoDocumento.SelectedValue != ParametroBC.Instance.getParamValue("CodMuestraGratis") &&
                        cmbTipoDocumento.SelectedValue != ParametroBC.Instance.getParamValue("CodMuestraGarantia"))
                {
                    //--- rendimiento
                    PedidoBE pObjPedido = (PedidoBE)Session["Pedido"];

                    foreach (DetalleBE objDetalle in pObjPedido.Detalle)
                    {
                        if (objDetalle.CodCentro.TrimStart('0') == "9160")
                        {
                           // error9160 = "No se permite asignar stock del 9160:LIMASA."; comentado 23.04.2013
                            //Session["Mensaje"] += "No se permite asignar stock del 9160:LIMASA.";
                            //tcMain.ActiveTabIndex = 1;
                            //throw new Exception();
                            // break; comentado 23.04.2013
                        }
                        else
                        {
                            error9160 = "";
                        }

                        if (string.IsNullOrEmpty(error9160))
                        {
                            MaterialBE objMat = null;
                            if (objDetalle.Material == null)
                            { objMat = MaterialBC.Instance.leerMaterial(objDetalle.CodMaterial, pObjPedido.OrgVentas, pObjPedido.CanalDist); }
                            else { objMat = objDetalle.Material; }
                            if (objMat != null &&
                                !ParametroBC.Instance.esTipoX(objMat.Tipo, "TipoMatServicio") &&
                                ParametroBC.Instance.esTipoX(objMat.UMedidaRendimiendo, "UMRendimiento"))
                            {
                                decimal nuevaCant = PedidoBC.Instance.calculaRendimiento(objDetalle.Cantidad, objDetalle.ValorRendimiento); //rgutierrez 15.11.2011
                                //decimal nuevaCant = this.calculaRendimiento(objDetalle.Cantidad, objDetalle.ValorRendimiento);
                                objDetalle.Cantidad = nuevaCant;

                                if (objMat.TieneServ)
                                {
                                    pedConMatServ = true;
                                }
                            }
                        }
                        
                    }

                    if (string.IsNullOrEmpty(error9160))
                    {
                        //fecha de facturacion
                        if (!txtFechaFact.Text.Equals(""))
                            pObjPedido.FechaFacturacion = DateTime.Parse(txtFechaFact.Text);
                        //--- cambiar fecha de entrega
                        this.calculaFechaEntrega(pObjPedido);
                        Session["Pedido"] = pObjPedido;
                        this._lvObjPedido = (PedidoBE)Session["Pedido"];
                    }
                    
                }
                //-------------------------------------


                string retval = "", numPedido = "", op = "";
                retval = error9160;
                bool modifOk = false;
                PedidoBE objPedido = this._lvObjPedido;
                
                if (Session["Operacion"] != null)
                {
                    op = Session["Operacion"].ToString();
                }
                try
                {
                    if (string.IsNullOrEmpty(error9160))
                    {
                        //--- enviar lote en blanco si es oferta
                        if (ParametroBC.Instance.esTipoOferta(objPedido.CodTipoDoc))
                        {
                            //limpiar lotes si es oferta
                            List<DetalleBE> lstDetalle = new List<DetalleBE>();
                            foreach (DetalleBE detItem in objPedido.Detalle)
                            {
                                detItem.CodLote = "";
                                lstDetalle.Add(detItem);
                            }
                            objPedido.Detalle = lstDetalle;
                        }
                        //--- tomar usuario de sesión
                        CredencialesController.Usuario = (RfcConfigParametersBE)Session["UsuarioWeb"];
                        //rgutierrez 13.01.2012
                        //if (ParametroBC.Instance.esTipoX(cmbCondicionesPago.SelectedValue, "descCD") && op.ToLower() != "editar")// && !cmbGrupoCond.SelectedValue.Equals(""))
                        //{
                        //    foreach (DetalleBE d in objPedido.Detalle)
                        //    {

                        //        //d.DctoDecorPorc.Importe = Math.Abs(d.DctoDecorPorc.Importe);
                        //        if (d.DctoDecorPorc.Importe > 0)
                        //        {
                        //            d.DctoDecorPorc.Importe += 3;
                        //            //d.DctoDecorPorc.Importe = -d.DctoDecorPorc.Importe;
                        //        }
                        //    }
                        //}
                        //-----------------
                        switch (op.ToLower())
                        {
                            case "editar":
                                objPedido.Mail = txtCorreo.Text;
                                //------------------------

                                //------------------------------
                                retval = PedidoBC.Instance.modificar(out modifOk, objPedido);
                                break;
                            case "crear":
                            case "copiar":
                                retval = PedidoBC.Instance.procesarPedido(out numPedido, objPedido);

                                if ((op.Equals("copiar") || op.Equals("crear")) && Session["planFact"] != null)
                                {
                                    ((List<PlanFactBE>)Session["planFact"]).RemoveAll(x => x.TETXT.Equals("") || x.AFDAT.Year.Equals(1));
                                    if (((List<PlanFactBE>)Session["planFact"]).Count > 0)
                                        PedidoBC.Instance.setPlanFact(numPedido, (List<PlanFactBE>)Session["planFact"], true);
                                }
                                break;
                        }
                    }                    
                }
                catch (Exception ex)
                {
                    //throw ex;
                    Session["Mensaje"] = ex.Message;
                }
                finally
                {
                    tcMain.ActiveTabIndex = 1;
                    //verificar resultado:
                    if (!numPedido.Equals(""))
                    {
                        //limpia sesion
                        Session.Remove("Operacion");
                        Session.Remove("Pedido");
                        Session.Remove("MaterialesList");
                        Session.Remove("ClienteEventual");
                        Session.Remove("Cliente");
                        Session.Remove("Interlocutores");
                        Session.Remove("ultimaPosAdd");
                        this.limpiaPedido();
                        this.manejarBotonera();
                        //--- borrar vendedor web
                        txtCodVendedorWeb.Text = string.Empty;
                        txtNomVendedorWeb.Text = string.Empty;
                        //--- poner nro de pedido generado en el campo num pedido
                        txtNumPedido.Text = numPedido;

                        //rhuapaya 27.06.2012 validamos el texto dscto adicional.
                        if (cmbTipoDocumento.SelectedValue == "Z001")
                        {
                            lblDsctoAdicional.Visible = true;
                            lblEtiquetaDsctoAdicional.Visible = true;
                            hidDescuentoTotal.Visible = true;
                            txtDsctoAdicional.Visible = true;
                            txtDsctoAdicional.Text = "";
                            hidDescuentoTotal.Value = "";
                        }
                        else
                        {
                            lblDsctoAdicional.Visible = false;
                            lblEtiquetaDsctoAdicional.Visible = false;
                            hidDescuentoTotal.Visible = false;
                            txtDsctoAdicional.Visible = false;
                            txtDsctoAdicional.Text = "";
                            hidDescuentoTotal.Value = "";
                        }

                        //--- mostrar mensaje de creación
                        if (pedConMatServ)
                        {
                            retval += ParametroBC.Instance.getParamValue("msgPedConServ");
                        }
                        Session["Mensaje"] = retval;

                        tcMain.ActiveTabIndex = 0;


                    }
                    //si es una edición de pedido y todo salió ok, retval viene vacío...
                    if (op.ToLower() == "editar")
                    {
                        //if (retval.Equals(""))
                        if (modifOk)
                        {

                            //limpia sesion
                            Session.Remove("Operacion");
                            Session.Remove("Pedido");
                            Session.Remove("MaterialesList");
                            Session.Remove("ClienteEventual");
                            Session.Remove("Cliente");
                            Session.Remove("Interlocutores");
                            Session.Remove("ultimaPosAdd");
                            Session.Remove("ClienteBloqueado");
                            Session.Remove("PedidoTratado");
                            this.limpiaPedido();
                            this.manejarBotonera();
                            //--- borrar vendedor web
                            txtCodVendedorWeb.Text = string.Empty;
                            txtNomVendedorWeb.Text = string.Empty;

                            //Session["Mensaje"] = "Doc. de venta " + objPedido.NumPedido + " se ha grabado.";
                            if (pedConMatServ)
                            {
                                retval += ParametroBC.Instance.getParamValue("msgPedConServ");
                            }
                            Session["Mensaje"] = retval;

                            tcMain.ActiveTabIndex = 0;
                        }
                    }

                    Session["Mensaje"] = retval != "" ? retval : Session["Mensaje"];

                    upBotones.Update();
                    upMain.Update();
                    ((Site)Master).muestraMensajes();
                }
            }
            else {
                upBotones.Update();
                upMain.Update();
                ((Site)Master).muestraMensajes();
            
            }

            
        }

        protected void btnActualizar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                //validamos que el pocentaje de descuento adicional (ZD12) no sea mayor ni menor al que viene
                //rhuapaya 25.06.2012 @@@
                if (txtDsctoAdicional.Visible == true)
                {
                    validaDsctoAdicional = true;
                    if (txtDsctoAdicional.Text.Trim() != "" && Convert.ToDecimal(txtDsctoAdicional.Text) != 0)
                    {
                        if (Convert.ToDecimal(hfDsctoAdi.Value) != Convert.ToDecimal(txtDsctoAdicional.Text))
                        {
                            Session["Mensaje"] = "El descuento no puede ser mayor ni menor al descuento dado.";
                            validaDsctoAdicional = false;
                            tcMain.ActiveTabIndex = 0;
                            txtDsctoAdicional.Focus();
                            return;
                        }
                    }
                }
                PedidoBE pObjPedido = (PedidoBE)Session["Pedido"];
                pObjPedido.FechaFacturacion = DateTime.Parse(txtFechaFact.Text);

                foreach (GridViewRow dli in cgvMateriales.Rows)
                {
                    //eliminar items
                    CheckBox chkBorrar = (CheckBox)dli.FindControl("chkBorrar");
                    if (chkBorrar != null && chkBorrar.Checked)
                    {
                        HiddenField hidPosicion = (HiddenField)dli.FindControl("hidPosicion");
                        if (hidPosicion != null)
                        {
                            DetalleBE obj = pObjPedido.Detalle.Find(X => X.Posicion == hidPosicion.Value);
                            if (obj != null)
                            {
                                pObjPedido.Detalle.Remove(obj);
                                pObjPedido.Detalle.RemoveAll(X => X.PosSup == obj.Posicion);
                            }
                        }
                    }
                    //--- fin eliminación
                }
                //--- calcula rendimiento si no es muestra gratis / muestra en garantía
                if (!ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "CodMuestraGratis") &&
                    !ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "CodMuestraGarantia"))
                {
                    foreach (DetalleBE objDetalle in pObjPedido.Detalle)
                    {
                        //if (objDetalle.CodCentro.TrimStart('0') == "9160")
                        //{
                        //    Session["Mensaje"] = "No se permite asignar stock del 9160:LIMASA.";
                        //    return;
                        //}
                        if (objDetalle.Material == null)
                        {
                            objDetalle.Material = MaterialBC.Instance.leerMaterial(objDetalle.CodMaterial, pObjPedido.OrgVentas, pObjPedido.CanalDist);
                        }
                        //si UM = UNidad => redondear al entero mayor
                        if (ParametroBC.Instance.esTipoX(objDetalle.CodUMedida, "UMUnidad"))
                        {
                            objDetalle.Cantidad = (objDetalle.Cantidad > decimal.Truncate(objDetalle.Cantidad)) ? decimal.Truncate(objDetalle.Cantidad) + 1 : objDetalle.Cantidad;
                        }
                        //--- calcular rendimiento
                        if (!ParametroBC.Instance.esTipoX(objDetalle.Material.Tipo, "TipoMatServicio") &&
                            ParametroBC.Instance.esTipoX(objDetalle.Material.UMedidaRendimiendo, "UMRendimiento"))
                        {
                            objDetalle.Cantidad = PedidoBC.Instance.calculaRendimiento(objDetalle.Cantidad, objDetalle.ValorRendimiento); //rgutierrez 15.11.2011
                            //objDetalle.Cantidad = this.calculaRendimiento(objDetalle.Cantidad, objDetalle.ValorRendimiento);
                        }
                    }
                }

                PedidoBC.Instance.ActualizarPosiciones(pObjPedido); //rgutierrez 15.11.2011
                ////cambiar cantidades del combo / kit
                //decimal cantAux = 0m;
                //foreach (DetalleBE tmpDetalleBE in pObjPedido.Detalle)
                //{
                //    List<DetalleBE> lstAux = pObjPedido.Detalle.FindAll(X => X.PosSup == tmpDetalleBE.Posicion);
                //    //--- si tiene items (es cabecera kit/combo)
                //    if (lstAux.Count > 0)
                //    {
                //        //--- si la cantidad anterior es distinta a la actual:
                //        //if (tmpDetalleBE.CantComp != tmpDetalleBE.Cantidad)
                //        {

                //            foreach (DetalleBE itmAux in lstAux)
                //            {
                //                cantAux = itmAux.Cantidad;
                //                itmAux.Cantidad = itmAux.CantComp * tmpDetalleBE.Cantidad;

                //                //si UM = UNidad => redondear al entero mayor
                //                if (ParametroBC.Instance.esTipoX(itmAux.CodUMedida, "UMUnidad"))
                //                {
                //                    itmAux.Cantidad = (itmAux.Cantidad > decimal.Truncate(itmAux.Cantidad)) ? decimal.Truncate(itmAux.Cantidad) + 1 : itmAux.Cantidad;
                //                    if (cantAux > itmAux.Cantidad)
                //                    {
                //                        cantAux = (cantAux > decimal.Truncate(cantAux)) ? decimal.Truncate(cantAux) + 1 : cantAux;
                //                        itmAux.Cantidad = cantAux;
                //                    }
                //                }
                //                else //para unidades ML y M2
                //                {
                //                    if (cantAux > itmAux.Cantidad)
                //                    {
                //                        itmAux.Cantidad = cantAux;
                //                    }
                //                }

                //                if (itmAux.Material == null)
                //                {
                //                    itmAux.Material = MaterialBC.Instance.leerMaterial(itmAux.CodMaterial, pObjPedido.OrgVentas, pObjPedido.CanalDist);
                //                }
                //                //--- calcular rendimiento
                //                if (!ParametroBC.Instance.esTipoX(itmAux.Material.Tipo, "TipoMatServicio") &&
                //                    ParametroBC.Instance.esTipoX(itmAux.Material.UMedidaRendimiendo, "UMRendimiento"))
                //                {
                //                    itmAux.Cantidad = PedidoBC.Instance.calculaRendimiento(itmAux.Cantidad, itmAux.ValorRendimiento);//rgutierrez 16.11.2011
                //                    //itmAux.Cantidad = this.calculaRendimiento(itmAux.Cantidad, itmAux.ValorRendimiento);
                //                }

                //                //--- cambiar cantidades de reparto si solo hay un reparto:
                //                if (itmAux.Repartos.Count == 1)
                //                {
                //                    itmAux.Repartos[0].CantPed = itmAux.Cantidad;
                //                    itmAux.Repartos[0].CantConf = itmAux.Cantidad;
                //                }
                //            }
                //            //-- guardo la cantidad en otra variable (cantidad antigua)
                //            tmpDetalleBE.CantComp = tmpDetalleBE.Cantidad;
                //        }
                //    }
                //    //--- cambiar cantidades de reparto si solo hay un reparto:
                //    if (tmpDetalleBE.Repartos.Count == 1)
                //    {
                //        tmpDetalleBE.Repartos[0].CantPed = tmpDetalleBE.Cantidad;
                //        tmpDetalleBE.Repartos[0].CantConf = tmpDetalleBE.Cantidad;
                //    }
                //}
                ////---- fin cambio cantidades

                //Session["Pedido"] = pObjPedido;
                Session["Pedido"] = pObjPedido;
                this.buscaPrecios();
                
                tcMain.ActiveTabIndex = 1;

                //percepcion
                //string mensaje_perc = "Pos. Materiales sujetos a Percepción: ";
                //string mensaje_no_perc = "Pos. Materiales NO sujetos a Percepcion: ";
                //string band_perc = "";
                //string band_no_perc = "";

                //foreach (DetalleBE deta_per in pObjPedido.Detalle)
               // {
                 //   if (deta_per.TotPercep > 0)
                  //  {
                    //    mensaje_perc = mensaje_perc + deta_per.Posicion + " ";
                     //   band_perc = "X";
                   // }
                   // else
                    //{

                      //  mensaje_no_perc = mensaje_no_perc + deta_per.Posicion + " ";
                       // band_no_perc = "X";

                    //}

//                }

               // string mensaje_alerta_mat = "";
                
                //if(band_perc == "X" && band_no_perc == "" ){
                 //   mensaje_alerta_mat = mensaje_perc;
                //} else if(band_perc == "" && band_no_perc == "X"){
                  //  mensaje_alerta_mat =  mensaje_no_perc;
                //} else if (band_perc == "X" && band_no_perc == "X"){
                  //  mensaje_alerta_mat = mensaje_perc + mensaje_no_perc;
                //}
               
               // Session["Mensaje"] = mensaje_alerta_mat;
               


            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
                upBotones.Update();
                upMain.Update();

           

            }
        }

        protected void btnFlujo_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                string _lpNumPedido = txtNumPedido.Text.Trim();
                if (_lpNumPedido.Equals(string.Empty) || _lpNumPedido.Equals("0000000000"))
                {
                    Session["Mensaje"] = "Debe ingresar el número de documento comercial que desea consultar.";
                    txtNumPedido.Focus();
                }
                else
                {
                    string str = "<script type='text/javascript'>var win=window.open('Seguimiento.aspx?np=" + _lpNumPedido + "',null,'width=1000,height=500,top=50,left=150,status=no,resizable=no,scrollbars=yes','true');</script>";
                    ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "SEGUIMIENTO", str, false);
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
                upBotones.Update();
                upMain.Update();
            }
        }

        protected void btnImprimir_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                if (txtNumPedido.Text.Trim().Equals(string.Empty))
                {
                    Session["Mensaje"] = "Debe ingresar el número de documento comercial que desea imprimir.";
                    txtNumPedido.Focus();
                }
                else
                {
                    if (!rblTiposImpresion.SelectedValue.Equals(""))
                    {
                        PedidoBE pObjPedido = PedidoBC.Instance.leer(txtNumPedido.Text.Trim());

                        if (pObjPedido != null)
                        {
                            Session["PedidoImpr"] = pObjPedido;
                            //imprimir
                            string imprPage = "";
                            switch (rblTiposImpresion.SelectedValue)
                            {
                                case "0":
                                    if (pObjPedido.CodTipoDoc.Equals( "Z036"))
                                        imprPage = "DocImpVisitas.aspx";
                                    else
                                        imprPage = "DocImpr.aspx";
                                    break;
                                case "1"://solo para ofertas:
                                    //rgutierrez 16.11.2011 Se quita la validacion para que tambien permita imprimir Pedidos
                                    //if (!ParametroBC.Instance.esTipoOferta(pObjPedido.CodTipoDoc))
                                    //{
                                    //    Session["Mensaje"] = "La impresión seleccionada solo es válida para Ofertas.";
                                    //    break;
                                    //}
                                    imprPage = "DocImprGrp.aspx";
                                    break;
                                case "2"://solo para ofertas:
                                    if (!ParametroBC.Instance.esTipoOferta(pObjPedido.CodTipoDoc))
                                    {
                                        Session["Mensaje"] = "La impresión seleccionada solo es válida para Ofertas.";
                                        break;
                                    }
                                    imprPage = "DocEmail.aspx";
                                    break;
                                case "3"://solo para ofertas:
                                    //rgutierrez 28.12.2011
                                    //if (!ParametroBC.Instance.esTipoOferta(pObjPedido.CodTipoDoc))
                                    //{
                                    //    Session["Mensaje"] = "La impresión seleccionada solo es válida para Ofertas.";
                                    //    break;
                                    //}
                                    imprPage = "DocCotizaImpr.aspx";
                                    break;
                                default:
                                    Session["Mensaje"] = "Debe seleccionar un tipo de impresión válida.";
                                    break;
                            }
                            if (!string.IsNullOrEmpty(imprPage))
                            {
                                string str = string.Empty;
                                List<InstalaBE> lstDetalle = null;
                                if ((rblTiposImpresion.SelectedValue.Equals("3")) && (ParametroBC.Instance.esTipoOferta(pObjPedido.CodTipoDoc)))
                                {
                                    str = string.Format("<script type='text/javascript'> " +
                                                            "window.open('DocCotizaImpr.aspx?np={1}','','width=390,height=600,top=50,left=350,status=no,resizable=no,scrollbars=yes','true'); " +
                                                      " </script>", imprPage, pObjPedido.NumPedido);
                                }
                                else  if (ParametroBC.Instance.esTipoOferta(pObjPedido.CodTipoDoc))
                                {
                                    //str = string.Format("<script type='text/javascript'> " +
                                    //                        "window.open('{0}?np={1}','','width=800,height=600,top=50,left=250,status=no,resizable=no,scrollbars=yes','true');" +                                                            
                                    //                  " </script>",imprPage,pObjPedido.NumPedido);
                                    lstDetalle = PedidoBC.Instance.listadoInstalacion(pObjPedido.NumPedido);
                                    Session["listadoInstalacion"] = lstDetalle;
                                    string script = string.Empty;
                                    script = "<script type='text/javascript'>" +
                                              "window.open('{0}?np={1}','','width=800,height=600,top=50,left=250,status=no,resizable=no,scrollbars=yes','true');";

                                    //RGF 20111027
                                    //if (lstDetalle != null)
                                    //{
                                    //    if (lstDetalle.Count > 0)
                                    //        script += " window.open('DocImprInst.aspx?np={1}','','width=800,height=600,top=50,left=250,status=no,resizable=no,scrollbars=yes','true'); ";
                                    //}

                                    script += "</script>";
                                    str = string.Format(script, imprPage, pObjPedido.NumPedido);
                                }
                                else
                                {
                                    //PARA PROD SE DEBE DE QUITAR ESTA LINEA window.open('DocImprInst.aspx?np={1}'
                                    lstDetalle = PedidoBC.Instance.listadoInstalacion(pObjPedido.NumPedido);
                                    Session["listadoInstalacion"] = lstDetalle;
                                    string script = string.Empty;
                                    script = "<script type='text/javascript'>" +
                                              "window.open('{0}?np={1}','','width=600,height=600,top=50,left=150,status=no,resizable=no,scrollbars=yes','true'); ";

                                    //RGF 20111027
                                    //if (lstDetalle != null)
                                    //{
                                    //    if (lstDetalle.Count > 0)
                                    //        script += " window.open('DocImprInst.aspx?np={1}','','width=800,height=600,top=50,left=250,status=no,resizable=no,scrollbars=yes','true'); ";
                                    //}

                                    script += "</script>";
                                    str = string.Format(script, imprPage, pObjPedido.NumPedido);
                                }
                                ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "IMPRIMIR", str, false);
                            }
                        }
                        else
                        {
                            Session["Mensaje"] = "No se encontró el Doc de Ventas";
                            txtNumPedido.Focus();
                        }
                    }
                    else
                    {
                        Session["Mensaje"] = "Debe seleccionar un tipo de impresión válida.";
                    }
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
                upBotones.Update();
                upMain.Update();
            }
        }

        private void calculaFechaValidez()
        {
            if (cmbTipoDocumento.SelectedValue.Equals(ParametroBC.Instance.getParamValue("CodReserva")))
            {
                //txtFechaValidez.Enabled = false;
                double dias = Convert.ToDouble(ParametroBC.Instance.getParamValue("ValidezReserva"));
                txtFechaValidez.Text = DateTime.Today.AddDays(dias).ToString("dd/MM/yyyy");
            }
            if (ParametroBC.Instance.esTipoOferta(cmbTipoDocumento.SelectedValue))
            {
                double dias = Convert.ToDouble(ParametroBC.Instance.getParamValue("ValidezOferta"));
                txtFechaValidez.Text = DateTime.Today.AddDays(dias).ToString("dd/MM/yyyy");
            }
        }

        protected void btnCrear_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                //rhuapaya 25.06.2012 validamos el texto dscto adicional.
                if (cmbTipoDocumento.SelectedValue == "Z001")
                {
                    lblDsctoAdicional.Visible = true;
                    lblEtiquetaDsctoAdicional.Visible = true;
                    hidDescuentoTotal.Visible = true;
                    txtDsctoAdicional.Visible = true;
                }
                else
                {
                    lblDsctoAdicional.Visible = false;
                    lblEtiquetaDsctoAdicional.Visible = false;
                    hidDescuentoTotal.Visible = false;
                    txtDsctoAdicional.Visible = false;
                }

                string pTipoDoc = cmbTipoDocumento.SelectedValue;
                string cod = ParametroBC.Instance.getParamValue("CodPedInst");
                if (cmbTipoDocumento.SelectedValue.ToString().Equals(cod))
                {
                    //cambiar por el del webconfig <add key="CodPedInst" value="Z037"/>
                    popUpGenerarServicio.Show();
                }
                else
                {
                    if (ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "CodConRef"))
                    {
                        throw new Exception("El tipo de pedido seleccionado debe ser creado con referencia a otro documento.");
                    }
                    this.btnCancel_Click(sender, e);
                    txtNumPedido.Text = string.Empty;
                    txtNumPedido.ReadOnly = true;

                    this.calculaFechaValidez();

                    Session["Operacion"] = "crear";
                    this.manejarBotonera();
                    this.cargaDatosUsuario();
                    txtFechaFact.Text = DateTime.Now.ToShortDateString();

                    if (ParametroBC.Instance.esTipoX(pTipoDoc, "CodPedDatServ"))
                    {
                        this.bloquearCliente(true);
                        Session["ClienteBloqueado"] = true;
                        //--- Falta bloquear Interlocutores...
                        lnkShowPopUpServicios.Visible = true;
                        pnlServicios.Visible = true;

                        lnkShowPopUpTextos.Visible = false;
                        pnlTextos.Visible = false;
                    }
                    else
                    {
                        lnkShowPopUpServicios.Visible = false;
                        pnlServicios.Visible = false;

                        lnkShowPopUpTextos.Visible = true;
                        pnlTextos.Visible = true;
                    }

                    lnkShowPopUpTextosVisita.Text = "";
                    if (ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "DocsTextosVisitas"))
                    {
                        if (cmbTipoDocumento.SelectedValue.Equals("Z036"))
                        {
                            tpDescVisita.Visible = true;
                            tpDescInstala.Visible = false;
                            tpResultadoVisita.Visible = true;
                            lnkShowPopUpTextosVisita.Text = "Datos de la visita";
                            cmbTipoVisita.Enabled = true;
                            cbxReembolsable.Enabled = true;
                        }
                        else if (cmbTipoDocumento.SelectedValue.Equals("Z037"))
                        {
                            tpResultadoVisita.Visible = false;
                            lnkShowPopUpTextosVisita.Text = "Datos de la instalación";

                            tpDescVisita.Visible = false;
                            tpDescInstala.Visible = true;
                        }
                    }
                    else
                    {
                        lnkShowPopUpTextosVisita.Text = "";
                        cmbTipoVisita.Enabled = false;
                        cbxReembolsable.Enabled = false;
                    }

        
                    tcMain.ActiveTabIndex = 0;
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
                tcMain.Enabled = false;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
                upBotones.Update();
                upMain.Update();
            }
        }

        protected void btnEditar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                if (txtNumPedido.Text.Trim().Equals(string.Empty))
                {
                    Session["Mensaje"] = "Debe ingresar el número de documento comercial que se quiere editar.";
                    txtNumPedido.Focus();
                }
                else
                {
                    //cargar info del pedido para editarla.
                    this.cargarPedido(txtNumPedido.Text.Trim(), "editar");
                    this._lvObjPedido = (PedidoBE)Session["Pedido"];

                    hidDescuentoTotal.Value = (_lvObjPedido.Detalle[0].DctoGenericoZD08.Importe * 10).ToString();//@rgutierrez 09.11.2011

                    foreach (DetalleBE d in _lvObjPedido.Detalle)
                    {
                        d.DctoDecorPorc.ImporteAnterior = d.DctoDecorPorc.Importe;
                    }
                    Session["Pedido"] = this._lvObjPedido;
                    lnkShowPopUpTextosVisita.Text = "";
                    if (ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "DocsTextosVisitas"))
                    {
                        if (cmbTipoDocumento.SelectedValue.Equals("Z036"))
                        {
                            tpDescVisita.Visible = true;
                            tpDescInstala.Visible = false;
                            tpResultadoVisita.Visible = true;
                            lnkShowPopUpTextosVisita.Text = "Datos de la visita";
                            cmbTipoVisita.Enabled = true;
                            cbxReembolsable.Enabled = true;
                        }
                        else if (cmbTipoDocumento.SelectedValue.Equals("Z037"))
                        {
                            tpResultadoVisita.Visible = false;
                            lnkShowPopUpTextosVisita.Text = "Datos de la instalación";

                            tpDescVisita.Visible = false;
                            tpDescInstala.Visible = true;
                        }
                    }
                    else
                    {
                        lnkShowPopUpTextosVisita.Text = "";
                        cmbTipoVisita.Enabled = false;
                        cbxReembolsable.Enabled = false;
                    }
                }
                tcMain.ActiveTabIndex = 1;
            }
            catch (Exception ex)
            {
                tcMain.Enabled = false;
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
                upBotones.Update();
                upMain.Update();
            }
        }
        private void deshabilitarVisualizacion(Boolean op) {

            string o = string.Empty;
            btnGrabar.Enabled = op;

            if (Session["Operacion"] != null)
            {
                o = Session["Operacion"].ToString();
            }

            if (o.Equals("copiar") || o.Equals("crear"))
            {
                btnReap.ImageUrl = "~/img/verify.dis.png";
                btnReap.Enabled = false;

            }
            else
            {
                btnReap.ImageUrl = "~/img/verify.png";
                btnReap.Enabled = true;
            }
            cmbOficina.Enabled = op;
            cmbCondicionesPago.Enabled = op;
            cmbMoneda.Enabled = op;
            cmbCondExp.Enabled = op;
            cmbGrupoCond.Enabled = op;
            txtFechaValidez.Enabled = op;
            txtOrdenCompra.Enabled = op;
            cmbMotivo.Enabled = op;
            txtFecha.Enabled = op;

            ibtnAddNuevoMat.Enabled = op;

            txtCodSolicitante.Enabled = op;
            txtNomSolicitante.Enabled = op;
            txtDirSolicitante.Enabled = op;
            txtTelSolicitante.Enabled = op;
            txtNifSolicitante.Enabled = op;
            ddlCodpSolicitante.Enabled = op;

            txtCodDestFact.Enabled = op;
            txtNomDestFact.Enabled = op;
            txtDirDestFact.Enabled = op;
            ddlCodpDestFact.Enabled = op;
            txtTelDestFact.Enabled = op;

            txtCodResPago.Enabled = op;
            txtNomResPago.Enabled = op;
            txtDirResPago.Enabled = op;
            ddlCodpResPago.Enabled = op;
            txtTelResPago.Enabled = op;
            txtNifResPago.Enabled = op;

            txtCodAgTrans.Enabled = op;
            txtNomAgTrans.Enabled = op;

            txtCodVendedor1.Enabled = op;
            txtNomVendedor1.Enabled = op;

            txtCodVendedorWeb.Enabled = op;
            txtNomVendedorWeb.Enabled = op;

            cmbVendedor2.Enabled = op;
            cmbVendedor3.Enabled = op;

            txtCodProfesional.Enabled = op;
            txtNomProfesional.Enabled = op;

            //rgutierrez 28.12.2011
            txtCodProfesional2.Enabled = op;
            txtNomProfesional2.Enabled = op;

            btnCancel.Enabled = true;
            btnVerificar.Enabled = op;
            btnActualizar.Enabled = op;

            btnGrabar.Enabled = op;
            //---
            btnEditar.Enabled = op;
            btnCrear.Enabled = op;
            btnCopiar.Enabled = op;

            //---
            txtNumPedido.ReadOnly = op;
            //---
            cmbOrgVtas.Enabled = op;
            cmbCanalDist.Enabled = op;
            cmbTipoDocumento.Enabled = op;
            //---

            btnImprimir.Enabled = true;
            //---
            //---
            cmbOrgVtas.Enabled = op;
            cmbCanalDist.Enabled = op;
            cmbTipoDocumento.Enabled = op;
            tcMain.Enabled = true;
            //-------------------------------------------
            // habilito el link para ver a los interlocutores pero deshabilito a cada uno de los campos del popup
            lnkShowPopUpInt.Enabled = true;

            txtCorreo.Enabled = op;
            txtNomAgTrans.Enabled = op;
            txtCodAgTrans.Enabled = op;
            txtNifResPago.Enabled = op;
            txtTelResPago.Enabled = op;
            ddlCodpResPago.Enabled = op;
            txtDirResPago.Enabled = op;
            txtNomResPago.Enabled = op;
            txtCodResPago.Enabled = op;
            txtTelDestFact.Enabled = op;
            txtDirDestFact.Enabled = op;
            txtNomDestFact.Enabled = op;
            txtCodDestFact.Enabled = op;
            txtTelDestMerc.Enabled = op;
            ddlCodpDestMerc.Enabled = op;
            txtDirDestMerc.Enabled = op;
            txtNomDestMerc.Enabled = op;
            txtCodDestMerc.Enabled = op;
            txtNifSolicitante.Enabled = op;
            ddlCodpSolicitante.Enabled = op;
            txtDirSolicitante.Enabled = op;
            txtNomSolicitante.Enabled = op;
            txtCodSolicitante.Enabled = op;



            btnImprimir.ImageUrl = "~/img/print.png";
            btnCopiar.ImageUrl = "~/img/copy.dis.png";
            btnCrear.ImageUrl = "~/img/new.dis.png";
            btnEditar.ImageUrl = "~/img/edit.dis.png";
            btnGrabar.ImageUrl = "~/img/save.dis.png";
            btnGrabar.ImageUrl = "~/img/save.dis.png";
            btnCancel.ImageUrl = "~/img/cancel.png";
            btnVerificar.ImageUrl = "~/img/verify.dis.png";
            btnActualizar.ImageUrl = "~/img/update.dis.png";


            txtNomProyecto.Enabled = op;

            txtCodProyecto.Enabled = op;
            txtCodVersion.Enabled = op;
        }

        protected void btnVisualizar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                if (txtNumPedido.Text.Trim().Equals(string.Empty))
                {
                    Session["Mensaje"] = "Debe ingresar el número de documento comercial que se quiere editar.";
                    txtNumPedido.Focus();
                }
                else
                {
                    //cargar info del pedido para editarla.
                    this.cargarPedido(txtNumPedido.Text.Trim(), "ver");
                }
                tcMain.ActiveTabIndex = 1;
            }
            catch (Exception ex)
            {
                tcMain.Enabled = false;
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
                upBotones.Update();
                upMain.Update();
            }
        }

        protected void btnCopiar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                if (txtNumPedido.Text.Trim().Equals(string.Empty))
                {
                    Session["Mensaje"] = "Debe ingresar el número de documento comercial que se quiere copiar.";
                    txtNumPedido.Focus();
                }
                else
                {
                    //-- Validación para NC de pedidos de servicio:
                    //string retVal;
                    Int64 pAux = Int64.Parse(txtNumPedido.Text.Trim());

                    if (PedidoBC.Instance.validaCopia(txtNumPedido.Text.Trim(), cmbTipoDocumento.SelectedValue.ToString()).Equals("S"))
                    {
                        Session["esPrimera"] = true;
                        this.cargarPedido(txtNumPedido.Text.Trim(), "copiar");
                        Session.Remove("esPrimera");
                    }
                    else
                        Session["Mensaje"] = ParametroBC.Instance.getParamValue("msgErrCopia2");
               }
                tcMain.ActiveTabIndex = 1;
            }
            catch (Exception ex)
            {
                tcMain.Enabled = false;
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                //rhuapaya 27.06.2012 validamos el texto dscto adicional.
                if (cmbTipoDocumento.SelectedValue == "Z001")
                {
                    lblDsctoAdicional.Visible = true;
                    lblEtiquetaDsctoAdicional.Visible = true;
                    hidDescuentoTotal.Visible = true;
                    txtDsctoAdicional.Visible = true;
                    txtDsctoAdicional.Text = "";
                    hidDescuentoTotal.Value = "";
                }
                else
                {
                    lblDsctoAdicional.Visible = false;
                    lblEtiquetaDsctoAdicional.Visible = false;
                    hidDescuentoTotal.Visible = false;
                    txtDsctoAdicional.Visible = false;
                    txtDsctoAdicional.Text = "";
                    hidDescuentoTotal.Value = "";
                }

                ((Site)Master).muestraMensajes();
                upBotones.Update();
                upMain.Update();
            }
        }

        protected void btnCancel_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                //limpia sesion
                Session.Remove("Operacion");
                Session.Remove("Pedido");
                Session.Remove("MaterialesList");
                Session.Remove("ClienteEventual");
                Session.Remove("Cliente");
                Session.Remove("Interlocutores");
                Session.Remove("ultimaPosAdd");
                Session.Remove("ClienteBloqueado");
                Session.Remove("PedidoTratado");
                Session.Remove("planFact");

                Session.Remove("codServicio");
                //tcMain.Enabled = false;
                //-----

                this.deshabilitarVisualizacion(true);
                this.manejarBotonera();
                this.limpiaPedido();

                //--- borrar vendedor web
                txtCodVendedorWeb.Text = string.Empty;
                txtNomVendedorWeb.Text = string.Empty;
                foreach(GridViewRow dli in cgvMateriales.Rows)            
                    ((TextBox)dli.FindControl("lblDescMaterial")).Enabled = true;


                lnkShowPedidosAsocidos.Text = "";
                //rhuapaya 27.06.2012 validamos el texto dscto adicional.
                if (cmbTipoDocumento.SelectedValue == "Z001")
                {
                    lblDsctoAdicional.Visible = true;
                    lblEtiquetaDsctoAdicional.Visible = true;
                    hidDescuentoTotal.Visible = true;
                    txtDsctoAdicional.Visible = true;
                    txtDsctoAdicional.Text = "";
                    hidDescuentoTotal.Value = "";
                }
                else
                {
                    lblDsctoAdicional.Visible = false;
                    lblEtiquetaDsctoAdicional.Visible = false;
                    hidDescuentoTotal.Visible = false;
                    txtDsctoAdicional.Visible = false;
                    txtDsctoAdicional.Text = "";
                    hidDescuentoTotal.Value = "";
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
                upBotones.Update();
                upMain.Update();
            }
        }

        protected void btnGrabarInterlocutores_Click(object sender, ImageClickEventArgs e)
        {
            string strMsg = "", strMsgItm = "";
            bool pasa= true;
            try
            {
                if (ParametroBC.Instance.esTipoOferta(cmbTipoDocumento.SelectedValue) && (txtCorreo.Text.Equals("")) && !cmbTipoDocumento.SelectedValue.Equals("Z004")) 
                { 
                    pasa = false;
                    strMsg = ParametroBC.Instance.getParamValue("msgErrCorreo");
                }
                if (pasa)
                {
                    ClienteBE objClienteBE = (ClienteBE)Session["Cliente"];
                    if (objClienteBE != null && objClienteBE.Eventual)
                    {
                        ClienteBE objCliente = new ClienteBE();
                        objCliente.Descripcion = txtNomSolicitante.Text;
                        objCliente.Direccion = txtDirSolicitante.Text;
                        try
                        {
                            objCliente.CodigoPostal = ddlCodpSolicitante.SelectedValue;
                        }
                        catch 
                        {
                            objCliente.CodigoPostal = string.Empty;
                        }
                        try
                        {
                            objCliente.Ciudad = ddlCodpSolicitante.SelectedItem.Text;
                        }
                        catch 
                        {
                            objCliente.Ciudad = string.Empty;
                        }
                        
                        objCliente.Telefono = txtTelSolicitante.Text;
                        objCliente.Ruc = txtNifSolicitante.Text.Trim();

                        //--- validar NIF Solicitante / Resp Pago
                        if (objCliente.Ruc.Length == 11 || objCliente.Ruc.Length == 8)//RUC
                        {
                            strMsgItm = ClienteBC.Instance.validaRUC(objCliente.Ruc, cmbOrgVtas.SelectedValue);
                            if (!strMsgItm.Equals(""))
                            {
                                strMsg += "- Solicitante: " + strMsgItm + "\n";
                                txtNifSolicitante.Text = string.Empty;
                                objCliente.Ruc = string.Empty;
                            }
                            else if (!objCliente.Ruc.Equals(string.Empty) && objCliente.Ruc.Length == 8 &&
                                     objCliente.Descripcion.Equals(string.Empty))
                            {
                                ClienteBE lv_cliente = ParametroBC.Instance.getClienteReniec(objCliente.Ruc);
                                if (lv_cliente != null)
                                {
                                    objCliente.Descripcion = lv_cliente.Descripcion;
                                    objCliente.Direccion = objCliente.Direccion.Equals(string.Empty) ? lv_cliente.Direccion : objCliente.Direccion;
                                    objCliente.CodigoPostal = objCliente.CodigoPostal.Equals(string.Empty) ? lv_cliente.CodigoPostal : objCliente.CodigoPostal;
                                    objCliente.Ciudad = objCliente.Ciudad.Equals(string.Empty) ? lv_cliente.Ciudad : objCliente.Ciudad;

                                    txtNomSolicitante.Text = objCliente.Descripcion;
                                    txtDirSolicitante.Text = objCliente.Direccion;

                                    try
                                    {
                                        ddlCodpSolicitante.SelectedValue = objCliente.CodigoPostal;
                                    }
                                    catch { ddlCodpSolicitante.SelectedValue = string.Empty; }
                                }
                                else
                                {
                                    strMsgItm = "No se encontró información para el DNI ingresado";
                                    strMsg += "- Solicitante: " + strMsgItm + "\n";

                                    objCliente.Descripcion = string.Empty;
                                    objCliente.Direccion = string.Empty;
                                    objCliente.CodigoPostal = string.Empty;
                                    objCliente.Ciudad = string.Empty;

                                    txtNomSolicitante.Text = objCliente.Descripcion;
                                    txtDirSolicitante.Text = objCliente.Direccion;
                                    try
                                    {
                                        ddlCodpSolicitante.SelectedValue = objCliente.CodigoPostal;
                                    }
                                    catch 
                                    {
                                        ddlCodpSolicitante.SelectedValue = string.Empty;
                                    }
                                    
                                }
                            }
                        }
                        else if (objCliente.Ruc.Length > 0)//inválido
                        {
                            strMsgItm = "NIF inválido";
                            strMsg += "- Solicitante: " + strMsgItm + "\n";
                            txtNifSolicitante.Text = string.Empty;
                            objCliente.Ruc = string.Empty;
                        }
                        //---

                        //------
                        string descripcionEventual = "", direccionEventual = "";
                        if (objCliente.Ruc != string.Empty)
                        {
                            descripcionEventual += objCliente.Ruc + " / ";
                        }
                        if (objCliente.Descripcion != string.Empty)
                        {
                            descripcionEventual += objCliente.Descripcion;
                        }
                        descripcionEventual = descripcionEventual.Trim();
                        if (objCliente.Direccion != string.Empty)
                        {
                            direccionEventual += objCliente.Direccion;
                            if (objCliente.CodigoPostal != string.Empty)
                            {
                                direccionEventual += " / " + objCliente.CodigoPostal + " " + objCliente.Ciudad;
                            }
                        }
                        //this.copiarClienteEventual();
                        //---
                        txtNomCliente.Text = descripcionEventual;
                        txtDirCliente.Text = direccionEventual;
                        ClienteBE objTmpCli = (ClienteBE)Session["Cliente"];
                        objTmpCli.Descripcion = descripcionEventual;
                        objTmpCli.Direccion = direccionEventual;
                        Session["Cliente"] = objTmpCli;
                        //------
                        //Session["ClienteEventual"] = objCliente;
                    }

                    //-- cargar y validar data de interlocutores:
                    if (!txtCodDestMerc.Text.Equals(""))
                    {
                        ClienteBE objDestMerc = new ClienteBE();
                        objDestMerc.Codigo = txtCodDestMerc.Text;
                        strMsgItm = ClienteBC.Instance.validaInterlocutor(ref objDestMerc, cmbOrgVtas.SelectedValue, cmbCanalDist.SelectedValue, gvSectorVal);
                        if (strMsgItm.Equals(""))//todo bien y no es eventual
                        {
                            if (!objDestMerc.Eventual)
                            {
                                txtNomDestMerc.Text = objDestMerc.Descripcion;
                                if (txtDirDestMerc.Text.Equals("")) { txtDirDestMerc.Text = objDestMerc.Direccion; }
                                if (ddlCodpDestMerc.SelectedValue.Equals("")) { ddlCodpDestMerc.SelectedValue = objDestMerc.CodigoPostal; }
                                if (txtTelDestMerc.Text.Equals("")) { txtTelDestMerc.Text = objDestMerc.Telefono; }
                            }
                        }
                        else
                        {
                            strMsg += "- Dest Merc: " + strMsgItm + "\n";
                            txtCodDestMerc.Text = string.Empty;
                            txtNomDestMerc.Text = string.Empty;
                        }
                    }
                    //---
                    if (!txtCodDestFact.Text.Equals(""))
                    {
                        ClienteBE objDestFact = new ClienteBE();
                        objDestFact.Codigo = txtCodDestFact.Text;
                        strMsgItm = ClienteBC.Instance.validaInterlocutor(ref objDestFact, cmbOrgVtas.SelectedValue, cmbCanalDist.SelectedValue, gvSectorVal);
                        if (strMsgItm.Equals(""))//todo bien
                        {
                            if (!objDestFact.Eventual)
                            {
                                txtNomDestFact.Text = objDestFact.Descripcion;
                                if (txtDirDestFact.Text.Equals("")) { txtDirDestFact.Text = objDestFact.Direccion; }
                                if (ddlCodpDestFact.SelectedValue.Equals("")) { ddlCodpDestFact.SelectedValue = objDestFact.CodigoPostal; }
                                if (txtTelDestFact.Text.Equals("")) { txtTelDestFact.Text = objDestFact.Telefono; }
                            }
                        }
                        else
                        {
                            strMsg += "- Dest Fact: " + strMsgItm + "\n";
                            txtCodDestFact.Text = string.Empty;
                            txtNomDestFact.Text = string.Empty;
                        }
                    }
                    //---
                    if (!txtCodResPago.Text.Equals(""))
                    {
                        ClienteBE objResPago = new ClienteBE();
                        objResPago.Codigo = txtCodResPago.Text;
                        strMsgItm = ClienteBC.Instance.validaInterlocutor(ref objResPago, cmbOrgVtas.SelectedValue, cmbCanalDist.SelectedValue, gvSectorVal);
                        if (strMsgItm.Equals(""))//todo bien
                        {
                            if (!objResPago.Eventual)
                            {
                                txtNomResPago.Text = objResPago.Descripcion;
                                if (txtDirResPago.Text.Equals("")) { txtDirResPago.Text = objResPago.Direccion; }
                                if (ddlCodpResPago.SelectedValue.Equals("")) { ddlCodpResPago.SelectedValue = objResPago.CodigoPostal; }
                                if (txtTelResPago.Text.Equals("")) { txtTelResPago.Text = objResPago.Telefono; }
                                if (txtNifResPago.Text.Equals("")) { txtNifResPago.Text = objResPago.Ruc; }
                            }
                            else
                            {
                                //--- validar NIF Resp Pago
                                string pRucResPago = txtNifResPago.Text.Trim();
                                if (pRucResPago.Length == 11 || pRucResPago.Length == 8)//RUC
                                {
                                    strMsgItm = ClienteBC.Instance.validaRUC(pRucResPago, cmbOrgVtas.SelectedValue);
                                    if (!strMsgItm.Equals(""))
                                    {
                                        strMsg += "- Resp. Pago: " + strMsgItm + "\n";
                                        txtNifResPago.Text = string.Empty;
                                    }
                                }
                                else if (pRucResPago.Length > 0)//inválido
                                {
                                    strMsgItm = "NIF inválido";
                                    strMsg += "- Resp. Pago: " + strMsgItm + "\n";
                                    txtNifResPago.Text = string.Empty;
                                }
                                //---
                            }
                        }
                        else
                        {
                            strMsg += "- Resp. Pago: " + strMsgItm + "\n";
                            txtCodResPago.Text = string.Empty;
                            txtNomResPago.Text = string.Empty;
                        }
                    }

                    //-- fix RP en muestra garantía
                    if (objClienteBE != null && objClienteBE.Eventual)
                    {
                        this.copiarClienteEventual();
                    }

                    //--- data del profesional
                    if (!txtCodProfesional.Text.Equals(""))
                    {
                        PersonaBE objProfesional = PersonaBC.Instance.leer(txtCodProfesional.Text.Trim());
                        if (objProfesional != null)
                        {
                            txtNomProfesional.Text = objProfesional.Descripcion;
                            txtCodProfesional.Text = objProfesional.CodPersona;
                        }
                        else
                        {
                            strMsg += "- Profesional: Código inválido\n";
                            txtCodProfesional.Text = string.Empty;
                            txtNomProfesional.Text = string.Empty;
                        }
                    }

                    //rgutierrez 28.12.2011
                    if (!txtCodProfesional2.Text.Equals(""))
                    {
                        PersonaBE objProfesional2 = PersonaBC.Instance.leer(txtCodProfesional2.Text.Trim());
                        if (objProfesional2 != null)
                        {
                            txtNomProfesional2.Text = objProfesional2.Descripcion;
                            txtCodProfesional2.Text = objProfesional2.CodPersona;
                        }
                        else
                        {
                            strMsg += "- Profesional 2: Código inválido\n";
                            txtCodProfesional2.Text = string.Empty;
                            txtNomProfesional2.Text = string.Empty;
                        }
                    }
                }

                //-----------------------------------
                if (!strMsg.Equals("")) { Session["Mensaje"] = strMsg; }
                else { mpeInterlocutores.Hide(); }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        private void manejarBotonera()
        {
            string op = "";
            if (Session["Operacion"] != null)
            {
                op = Session["Operacion"].ToString().ToLower();
                switch (op)
                {
                    case "crear":
                    case "editar":
                    case "ver":
                    case "copiar":
                        btnGrabar.Enabled = true;
                        btnGrabar.ImageUrl = "~/img/save.png";
                        btnCancel.Enabled = true;
                        btnCancel.ImageUrl = "~/img/cancel.png";
                        btnVerificar.Enabled = true;
                        btnVerificar.ImageUrl = "~/img/verify.png";
                        btnActualizar.Enabled = true;
                        btnActualizar.ImageUrl = "~/img/update.png";
                        btnEditar.Enabled = false;
                        
                        //---
                        btnEditar.Enabled = false;
                        btnEditar.ImageUrl = "~/img/edit.dis.png";
                        btnCrear.Enabled = false;
                        btnCrear.ImageUrl = "~/img/new.dis.png";
                        btnCopiar.Enabled = false;
                        btnCopiar.ImageUrl = "~/img/copy.dis.png";

                        
                        btnVisualizar.Enabled = false;

                        if (op.Equals("copiar") || op.Equals("crear"))
                        {
                            btnReap.ImageUrl = "~/img/verify.dis.png";
                            btnReap.Enabled = false;

                        }
                        else {
                            btnReap.ImageUrl = "~/img/verify.png";
                            btnReap.Enabled = true;
                        }

                        btnImprimir.Enabled = false;
                        btnImprimir.ImageUrl = "~/img/print.dis.png";
                        btnFlujo.Enabled = false;
                        btnFlujo.ImageUrl = "~/img/flujo.dis.png";
                        //---
                        txtNumPedido.ReadOnly = true;
                        lnkShowPopUpInt.Enabled = true;
                        tcMain.Enabled = true;
                        tcMain.TabIndex = 0;
                        ibtnAddNuevoMat.Enabled = true;
                        cmbTipoDocumento.Enabled = false;
                        //---

                        string codTipoDocNuevo = cmbTipoDocumento.SelectedValue;
                        
                            
                        if ((Session["PedidoTratado"] != null))
                        {
                            if (((bool)Session["PedidoTratado"]))
                            {
                                btnGrabar.Enabled = true;
                                btnGrabar.ImageUrl = "~/img/save.png";

                                cmbOficina.Enabled = false;
                                cmbCondicionesPago.Enabled = false;
                                cmbMoneda.Enabled = false;
                                //cmbCondExp.Enabled = false;
                                cmbGrupoCond.Enabled = false;
                                txtFechaValidez.Enabled = false;
                                txtOrdenCompra.Enabled = false;
                                cmbMotivo.Enabled = false;
                                txtFecha.Enabled = false;

                                ibtnAddNuevoMat.Enabled = false;

                                txtCodSolicitante.Enabled = false;
                                txtNomSolicitante.Enabled = false;
                                txtDirSolicitante.Enabled = false;
                                txtTelSolicitante.Enabled = false;
                                txtNifSolicitante.Enabled = false;
                                ddlCodpSolicitante.Enabled = false;

                                txtCodDestFact.Enabled = false;
                                txtNomDestFact.Enabled = false;
                                txtDirDestFact.Enabled = false;
                                ddlCodpDestFact.Enabled = false;
                                txtTelDestFact.Enabled = false;

                                txtCodResPago.Enabled = false;
                                txtNomResPago.Enabled = false;
                                txtDirResPago.Enabled = false;
                                ddlCodpResPago.Enabled = false;
                                txtTelResPago.Enabled = false;
                                txtNifResPago.Enabled = false;

                                txtCodAgTrans.Enabled = false;
                                txtNomAgTrans.Enabled = false;

                                //rgutierrez 22.11.2011
                                txtDirAgTrans.Enabled = false;
                                ddlCodpAgTrans.Enabled = false;
                                txtTelAgTrans.Enabled = false;
                                txtNifAgTrans.Enabled = false;

                                txtCodVendedor1.Enabled = false;
                                txtNomVendedor1.Enabled = false;

                                txtCodVendedorWeb.Enabled = false;
                                txtNomVendedorWeb.Enabled = false;

                             //   cmbVendedor2.Enabled = false;
                            //    cmbVendedor3.Enabled = false;

                           //     txtCodProfesional.Enabled = false;
                           //     txtNomProfesional.Enabled = false;

                            }
                        }
                        break;
                    default:
                        btnGrabar.Enabled = false;
                        btnGrabar.ImageUrl = "~/img/save.dis.png";
                        btnCancel.Enabled = false;
                        btnCancel.ImageUrl = "~/img/cancel.dis.png";
                        btnVerificar.Enabled = false;
                        btnVerificar.ImageUrl = "~/img/verify.dis.png";
                        btnActualizar.Enabled = false;
                        btnActualizar.ImageUrl = "~/img/update.dis.png";
                        
                        btnPlanFact.Enabled = false;
                        btnPlanFact.ImageUrl = "~/img/stock.png";
                        btnVisualizar.Enabled = false;
                        btnReap.Enabled = false;
                        btnReap.ImageUrl = "~/img/verify.png";
                        //---
                        btnEditar.Enabled = true;
                        btnEditar.ImageUrl = "~/img/edit.png";
                        btnCrear.Enabled = true;
                        btnCrear.ImageUrl = "~/img/new.png";
                        btnCopiar.Enabled = true;
                        btnCopiar.ImageUrl = "~/img/copy.png";

                        btnImprimir.Enabled = true;
                        btnImprimir.ImageUrl = "~/img/print.png";
                        btnFlujo.Enabled = true;
                        btnFlujo.ImageUrl = "~/img/flujo.png";    
                        //---
                        txtNumPedido.ReadOnly = false;
                        tcMain.Enabled = false;
                        lnkShowPopUpInt.Enabled = false;
                        tcMain.TabIndex = 0;
                        //---
                        cmbOrgVtas.Enabled = true;
                        cmbCanalDist.Enabled = true;
                        //cmbSector.Enabled = true;
                        cmbTipoDocumento.Enabled = true;
                        break;
                }
                if (Session["Operacion"].ToString().ToLower() == "editar")
                {
                    cmbOrgVtas.Enabled = false;
                    cmbCanalDist.Enabled = false;
                    //cmbSector.Enabled = false;
                    cmbTipoDocumento.Enabled = false;
                }
            }
            else
            {
                btnGrabar.Enabled = false;
                btnGrabar.ImageUrl = "~/img/save.dis.png";
                btnCancel.Enabled = false;
                btnCancel.ImageUrl = "~/img/cancel.dis.png";
                btnVerificar.Enabled = false;
                btnVerificar.ImageUrl = "~/img/verify.dis.png";
                btnActualizar.Enabled = false;
                btnActualizar.ImageUrl = "~/img/update.dis.png";
                //---
                btnEditar.Enabled = true;
                btnEditar.ImageUrl = "~/img/edit.png";
                btnCrear.Enabled = true;
                btnCrear.ImageUrl = "~/img/new.png";
                btnCopiar.Enabled = true;
                btnCopiar.ImageUrl = "~/img/copy.png";

                btnImprimir.Enabled = true;
                btnImprimir.ImageUrl = "~/img/print.png";
                btnFlujo.Enabled = true;
                btnFlujo.ImageUrl = "~/img/flujo.png";

                btnPlanFact.Enabled = false;
                btnVisualizar.Enabled = true;

                btnReap.ImageUrl = "~/img/verify.dis.png";
                btnReap.Enabled = false;
                //---
                txtNumPedido.ReadOnly = false;
                tcMain.Enabled = false;
                lnkShowPopUpInt.Enabled = false;
                
                tcMain.TabIndex = 0;
                //---
                cmbOrgVtas.Enabled = true;
                cmbCanalDist.Enabled = true;
                //cmbSector.Enabled = true;
                cmbTipoDocumento.Enabled = true;
            }

            if (Session["Pedido"] != null)
            {
                //PedidoBE obj = (PedidoBE)Session["Pedido"];
                string pTipoDoc = cmbTipoDocumento.SelectedValue;
                if (!ParametroBC.Instance.esTipoOferta(pTipoDoc) && op == "editar")
                {
                    this.bloquearCliente(true);
                    Session["ClienteBloqueado"] = true;
                }
                if (ParametroBC.Instance.esTipoX(pTipoDoc, "CodPedDatServ"))
                {
                    this.bloquearCliente(true);
                    Session["ClienteBloqueado"] = true;
                    //--- Falta bloquear Interlocutores...
                    lnkShowPopUpServicios.Visible = true;
                    pnlServicios.Visible = true;

                    lnkShowPopUpTextos.Visible = false;
                    pnlTextos.Visible = false;
                }
                else
                {
                    lnkShowPopUpServicios.Visible = false;
                    pnlServicios.Visible = false;

                    lnkShowPopUpTextos.Visible = true;
                    pnlTextos.Visible = true;
                }

                if (ParametroBC.Instance.esTipoX(pTipoDoc, "CodNCND"))
                {
                    lnkAddItems.Visible = false;
                    lnkAddItems.Enabled = false;
                }
                else
                {
                    lnkAddItems.Visible = true;
                    lnkAddItems.Enabled = true;
                }
            }
        }
        #endregion

        protected void ibtnCloseServicio_Click(object sender, ImageClickEventArgs e)
        {
            txtPedidoVenta1.Text = "";
            txtPedidoVenta2.Text = "";
            txtPedidoVenta3.Text = "";
            txtPedidoVenta4.Text = "";
            
            txtPedidoVisita1.Text = string.Empty;
            txtPedidoVisita2.Text = string.Empty;
            txtPedidoVisita3.Text = string.Empty;
            txtPedidoVisita4.Text = string.Empty;    

            Response.Redirect("DocVenta.aspx");

        }


        protected void btnReap_Click(object sender, ImageClickEventArgs e)
        {
            PedidoBE pObjPedido = (PedidoBE)Session["Pedido"];
            bool modifOk = false;
            string retval = "",  op = "";

            PedidoBE objPedido = this._lvObjPedido;


            try
            {
                if (Session["Operacion"] != null)
                {
                    op = Session["Operacion"].ToString();
                }

                if (pObjPedido != null)
                {
                    if (!pObjPedido.NumPedido.Equals(""))
                    {
                        retval = PedidoBC.Instance.reaprovisionar(out modifOk, pObjPedido);
                        objPedido = PedidoBC.Instance.leer(txtNumPedido.Text); 
                        retval = PedidoBC.Instance.reaprovisionar(out modifOk, pObjPedido);
                    }
                }

            }
            catch(Exception ex ){
                retval = ex.Message;
            }
            finally
            {
            {
                    tcMain.ActiveTabIndex = 1;
                    //verificar resultado:
                    if (!txtNumPedido.Text.Equals(""))
                    {
                        //limpia sesion
                        Session.Remove("Operacion");
                        Session.Remove("Pedido");
                        Session.Remove("MaterialesList");
                        Session.Remove("ClienteEventual");
                        Session.Remove("Cliente");
                        Session.Remove("Interlocutores");
                        Session.Remove("planFact");
                        this.limpiaPedido();
                        this.manejarBotonera();
                        //--- borrar vendedor web
                        txtCodVendedorWeb.Text = string.Empty;
                        txtNomVendedorWeb.Text = string.Empty;
                        //--- poner nro de pedido generado en el campo num pedido
                        txtNumPedido.Text = txtNumPedido.Text;
                        //--- mostrar mensaje de creación
                        tcMain.ActiveTabIndex = 0;
                    }
                    //si es una edición de pedido y todo salió ok, retval viene vacío...
                    if (op.ToLower() == "editar")
                    {
                        //if (retval.Equals(""))
                        if (modifOk)
                        {

                            //limpia sesion
                            Session.Remove("Operacion");
                            Session.Remove("Pedido");
                            Session.Remove("MaterialesList");
                            Session.Remove("ClienteEventual");
                            Session.Remove("Cliente");
                            Session.Remove("Interlocutores");

                            Session.Remove("ClienteBloqueado");
                            Session.Remove("PedidoTratado");
                            this.limpiaPedido();
                            this.manejarBotonera();
                            //--- borrar vendedor web
                            txtCodVendedorWeb.Text = string.Empty;
                            txtNomVendedorWeb.Text = string.Empty;

                            Session["Mensaje"] = retval;

                            tcMain.ActiveTabIndex = 0;
                        }
                    }

                    Session["Mensaje"] = retval != "" ? retval : Session["Mensaje"];

                    upBotones.Update();
                    upMain.Update();
                    ((Site)Master).muestraMensajes();
                }
            }

        }

        protected void ibtnGenerarServicio_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                txtPedidoVenta12.Text = "";
                txtPedidoVenta22.Text = "";
                txtPedidoVenta32.Text = "";
                txtPedidoVenta42.Text = "";

                txtPedidoVisita12.Text = "";
                txtPedidoVisita22.Text = "";
                txtPedidoVisita32.Text = "";
                txtPedidoVisita42.Text = "";

                List<string> lst_ventas = new List<string>();
                List<string> lst_visitas = new List<string>();


                if (!txtPedidoVenta1.Text.Equals(""))
                    lst_ventas.Add(txtPedidoVenta1.Text.Trim().ToString().PadLeft(10, '0'));

                if (!txtPedidoVenta2.Text.Equals(""))
                    lst_ventas.Add(txtPedidoVenta2.Text.Trim().ToString().PadLeft(10, '0'));

                if (!txtPedidoVenta3.Text.Equals(""))
                    lst_ventas.Add(txtPedidoVenta3.Text.Trim().ToString().PadLeft(10, '0'));

                if (!txtPedidoVenta4.Text.Equals(""))
                    lst_ventas.Add(txtPedidoVenta4.Text.Trim().ToString().PadLeft(10, '0'));


                if (!txtPedidoVisita1.Text.Equals(""))
                    lst_visitas.Add(txtPedidoVisita1.Text.Trim().ToString().PadLeft(10, '0'));

                if (!txtPedidoVisita2.Text.Equals(""))
                    lst_visitas.Add(txtPedidoVisita2.Text.Trim().ToString().PadLeft(10, '0'));

                if (!txtPedidoVisita3.Text.Equals(""))
                    lst_visitas.Add(txtPedidoVisita3.Text.Trim().ToString().PadLeft(10, '0'));

                if (!txtPedidoVisita4.Text.Equals(""))
                    lst_visitas.Add(txtPedidoVisita4.Text.Trim().ToString().PadLeft(10, '0'));

                string pNumPedido;
                string pRetVal = PedidoBC.Instance.generarServicio(out pNumPedido, lst_ventas, lst_visitas);
                Session["Mensaje"] = pRetVal;
                txtNumPedido.Text = pNumPedido.Trim();
                //muestro el pedido generado
                if (!pNumPedido.Trim().Equals(""))
                {
                    txtPedidoVenta12.Text = txtPedidoVenta1.Text;
                    txtPedidoVenta22.Text = txtPedidoVenta2.Text;
                    txtPedidoVenta32.Text = txtPedidoVenta3.Text;
                    txtPedidoVenta42.Text = txtPedidoVenta4.Text;

                    txtPedidoVisita12.Text = txtPedidoVisita1.Text;
                    txtPedidoVisita22.Text = txtPedidoVisita2.Text;
                    txtPedidoVisita32.Text = txtPedidoVisita3.Text;
                    txtPedidoVisita42.Text = txtPedidoVisita4.Text;

                    //cargar info del pedido para editarla.
                    this.cargarPedido(txtNumPedido.Text.Trim(), "editar");
                    this._lvObjPedido = (PedidoBE)Session["Pedido"];
                    foreach (DetalleBE d in _lvObjPedido.Detalle)
                    {
                        d.DctoDecorPorc.ImporteAnterior = d.DctoDecorPorc.Importe;
                    }
                    Session["Pedido"] = this._lvObjPedido;
                    lnkShowPopUpTextosVisita.Text = "";
                    if (ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "DocsTextosVisitas"))
                    {
                        if (cmbTipoDocumento.SelectedValue.Equals("Z036"))
                        {
                            tpDescVisita.Visible = true;
                            tpDescInstala.Visible = false;
                            tpResultadoVisita.Visible = true;
                            lnkShowPopUpTextosVisita.Text = "Datos de la visita";
                            lnkShowPedidosAsocidos.Text = "";
                            cmbTipoVisita.Enabled = true;
                            cbxReembolsable.Enabled = true;
                        }
                        else if (cmbTipoDocumento.SelectedValue.Equals("Z037"))
                        {
                            tpResultadoVisita.Visible = false;
                            lnkShowPopUpTextosVisita.Text = "Datos de la instalación";
                            lnkShowPedidosAsocidos.Text = "Pedidos Asociados";

                            tpDescVisita.Visible = false;
                            tpDescInstala.Visible = true;
                        }
                    }
                    else
                    {
                        lnkShowPopUpTextosVisita.Text = "";
                        cmbTipoVisita.Enabled = false;
                        cbxReembolsable.Enabled = false;
                    }

                    tcMain.ActiveTabIndex = 1;
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {


                txtPedidoVenta1.Text = "";
                txtPedidoVenta2.Text = "";
                txtPedidoVenta3.Text = "";
                txtPedidoVenta4.Text = "";

                txtPedidoVisita1.Text = string.Empty;
                txtPedidoVisita2.Text = string.Empty;
                txtPedidoVisita3.Text = string.Empty;
                txtPedidoVisita4.Text = string.Empty;    

                ((Site)Master).muestraMensajes();
                upBotones.Update();
                upMain.Update();
            }

        }

        protected void lnkShowPedidosAsocidos_click(object sender, EventArgs e)
        {
            popUpGenerarServicio.Show();
        }

        protected void btnPlanFact_Click(object sender, ImageClickEventArgs e)
        {            

            if (!txtTotal.Text.ToString().Equals(""))
            {
                PedidoBE pObjPedido = (PedidoBE)Session["Pedido"];
                if ((ParametroBC.Instance.esTipoX(pObjPedido.CodTipoDoc, "Calzada")))
                {
                    if (Session["planFact"] != null)
                        if (((List<PlanFactBE>)Session["planFact"]).Count>0)
                            ((List<PlanFactBE>)Session["planFact"]).RemoveAll(x => x.TETXT==null);

                    string _lpNumPedido =  ((String)Session["Operacion"]).ToLower().Equals("copiar") ? string.Empty : txtNumPedido.Text.Trim();
                    Session["Total"] = txtSubtotal.Text.ToString();
                    string str = "<script type='text/javascript'>var win=window.open('PlanFacturacion.aspx?np=" + _lpNumPedido + "',null,'width=1050,height=450,top=50,left=150,status=no,resizable=no,scrollbars=yes','true');</script>";
                    ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "PlanFact", str, false);
                }
                else {

                    Session["Mensaje"] = "El pedido debe de ser Z004 Venta Calzada";
                }
            }
            else {

                Session["Mensaje"] = "No existe Monto para el plan de facturación";
                
            
            }
            ((Site)Master).muestraMensajes();
        }

        //rgutierrez 22.11.2011
        protected void cgvMateriales_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                if (e.CommandName == "VerStock")
                {
                    string mID = e.CommandArgument.ToString();

                    StockBE objStock = new StockBE();
                    objStock.CodMaterial = mID;
                    //if (cmbCentro.Text != string.Empty)
                    //{
                    //    objStock.CodCentro = cmbCentro.SelectedValue;
                    //}
                    //if (cmbAlmacen.Text != string.Empty)
                    //{
                    //    objStock.CodAlmacen = cmbAlmacen.SelectedValue;
                    //}

                    if (!cmbOrgVtas.Text.Equals(string.Empty))
                    {
                        objStock.OrgVentas = cmbOrgVtas.Text;
                    }
                    if (!cmbCanalDist.Text.Equals(string.Empty))
                    {
                        objStock.CanalDist = cmbCanalDist.Text;
                    }

                    List<StockBE> lstStock = new List<StockBE>(), lstStockEC;
                    string fecImpStr = string.Empty; string uMedida = string.Empty; DateTime fecImp = new DateTime(); decimal cantImp = 0m;

                    lstStock = ParametroBC.Instance.getDataLotes(mID, 0m, "", "", "", "", "", cmbOrgVtas.SelectedValue, cmbCanalDist.SelectedValue);
                    lstStockEC = StockBC.Instance.buscarStockEC(objStock);
                    foreach (StockBE obj in lstStockEC)
                    {
                        if (obj.FechaStock >= DateTime.Today)
                        {
                            fecImp = obj.FechaStock;
                            cantImp = obj.StockDisponible;
                            uMedida = obj.UMB;
                            break;
                        }
                    }
                    fecImpStr = string.Format("{0:dd/MM/yyyy}", fecImp);

                    //Solo queda un nombre por centro
                    for (int i = 0; i < lstStock.Count - 1; i++)
                    {
                        string DescCentro = lstStock[i].DescCentro;
                        for (int j = i + 1; j <= lstStock.Count - 1; j++)//elimino los nombres de los centros repetidos
                        {
                            if (DescCentro.Equals(lstStock[j].DescCentro))
                                lstStock[j].DescCentro = "";
                            else
                                break;
                        }
                        string DescAlmacen = lstStock[i].DescAlmacen;
                        for (int j = i + 1; j <= lstStock.Count - 1; j++)//elimino los nombres de los Desc de Almacen repetidos
                        {
                            if (DescAlmacen.Equals(lstStock[j].DescAlmacen) && lstStock[i].CodCentro.Equals(lstStock[j].CodCentro))
                                lstStock[j].DescAlmacen = "";
                            else
                                DescAlmacen = lstStock[j].DescAlmacen;
                        }
                    }

                    if (lstStock.Count > 0)
                    {
                        string mDesc = lstStock[0].DescMaterial;
                        decimal tDisp = lstStock.Sum(X => X.StockDisponible);

                        if (cantImp > 0m)
                        {
                            lblStockEC.Text = string.Format("IMPORTACIÓN POR LLEGAR AL {0} : {1} {2}", fecImpStr, cantImp, uMedida);
                        }
                        lblVerStock.Text = "Stock " + mID + " \"" + mDesc + "\"" + " Disponible Total = " + tDisp.ToString();
                        //this.resetTotalesStock();
                        gvStock.ShowFooter = true;
                        gvStock.DataSource = lstStock;
                        gvStock.DataBind();
                        upVerStock.Update();
                        popUpVerStock.Show();
                    }
                    else
                    {
                        lblVerStock.Text = "No se encontró información para el material: " + mID;
                        Session["Mensaje"] = lblVerStock.Text;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //rgutierrez 22.11.2011
        protected void gvStock_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                this._totStockDisponible += Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "StockDisponible"));
            }
            else if (e.Row.RowType == DataControlRowType.Footer)
            {
                e.Row.Cells[3].Text = string.Format("{0:0,0.000}", this._totStockDisponible);
                e.Row.Cells[3].HorizontalAlign = HorizontalAlign.Right;
            }
        }

 

        //rgutierrez 06.12.2011
        private void CargarDescuentos(GridViewRow row, DetalleBE objItem)
        {
            Panel pnlDctoTotal = (Panel)row.FindControl("pnlDctoTotal");
            HtmlTable tblDescuentos = (HtmlTable)pnlDctoTotal.FindControl("tblDescuentos");

            HiddenField hidClaseCondicion;
            TextBox txtImporte;
            Label lblValor;

            string varHidClaseCondicion;
            string varTxtImporte;
            string varLblValor;

            for (int i = 0; i < tblDescuentos.Rows.Count; i++)
            {
                varHidClaseCondicion = "hidClaseCondicion" + i.ToString();
                varTxtImporte = "txtImporte" + i.ToString();
                varLblValor = "lblValor" + i.ToString();

                hidClaseCondicion = (HiddenField)tblDescuentos.FindControl(varHidClaseCondicion);
                txtImporte = (TextBox)tblDescuentos.FindControl(varTxtImporte);
                lblValor = (Label)tblDescuentos.FindControl(varLblValor);

                if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondDctoDecorPorc"))
                {
                    txtImporte.Text = objItem.DctoDecorPorc.Importe.ToString();
                    lblValor.Text = objItem.DctoDecorPorc.Valor.ToString();
                }
                else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondDctoAdicionalPorc"))
                {
                    txtImporte.Text = objItem.DctoAdicionalPorc.Importe.ToString();
                    lblValor.Text = objItem.DctoAdicionalPorc.Valor.ToString();
                }
                else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondDctoEstadisticoPorc"))
                {
                    txtImporte.Text = objItem.DctoEstadisticoPorc.Importe.ToString();
                    lblValor.Text = objItem.DctoEstadisticoPorc.Valor.ToString();
                }
                else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondDctoGerenciaPorc"))
                {
                    txtImporte.Text = objItem.DctoGerenciaPorc.Importe.ToString();
                    lblValor.Text = objItem.DctoGerenciaPorc.Valor.ToString();
                }
                else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondDctoGerenciaMonto"))
                {
                    txtImporte.Text = objItem.DctoGerenciaMonto.Importe.ToString();
                    lblValor.Text = objItem.DctoGerenciaMonto.Valor.ToString();
                }
                else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondZD06"))
                {
                    txtImporte.Text = objItem.DctoZD06.Importe.ToString();
                    lblValor.Text = objItem.DctoZD06.Valor.ToString();
                }
                else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondDctos")) //ZD09
                {
                    txtImporte.Text = objItem.DctoGenerico.Importe.ToString();
                    lblValor.Text = objItem.DctoGenerico.Valor.ToString();
                }
                else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondZD11"))
                {
                    txtImporte.Text = objItem.DctoZD11.Importe.ToString();
                    lblValor.Text = objItem.DctoZD11.Valor.ToString();
                }
                else if (hidClaseCondicion.Value == ParametroBC.Instance.getParamValue("CondDctosAdicional"))
                {
                    if (objItem.DsctoAdicionalZD12 != null)
                    {
                        if (validaDsctoAdicional == true)
                        {
                            txtImporte.Text = objItem.DsctoAdicionalZD12.Importe.ToString();
                            lblValor.Text = objItem.DsctoAdicionalZD12.Valor.ToString();    
                        }                        
                    }
                }                
            }
        }

        //WEBDIST
        private void VerificaOpcionesUsuario()
        {
            List<string> lstOpciones;
            if (Session["Opciones"] == null)
                return;
            else
                lstOpciones = (List<string>)Session["Opciones"];

            if (lstOpciones.Contains("VBAK_01") || lstOpciones.Contains("VBAK_02"))
                btnGrabar.Visible = true;
            else
                btnGrabar.Visible = false;

            if (lstOpciones.Contains("VBAK_01"))
            {
                btnCrear.Visible = true;
                btnCopiar.Visible = true;
            }
            else
            {
                btnCrear.Visible = false;
                btnCopiar.Visible = false;
            }

            if (lstOpciones.Contains("VBAK_02"))
            {
                btnEditar.Visible = true;
                btnPlanFact.Visible = true;
                btnReap.Visible = true;
                btnActualizar.Visible = true;
            }
            else
            {
                btnEditar.Visible = false;
                btnPlanFact.Visible = false;
                btnReap.Visible = false;
                btnActualizar.Visible = false;
            }

            if (lstOpciones.Contains("VBAK_03"))
            {
                btnVisualizar.Visible = true;
                btnFlujo.Visible = true;
            }
            else
            {
                btnVisualizar.Visible = false;
                btnFlujo.Visible = false;
            }
        }
    }
}
